diff options
169 files changed, 3095 insertions, 888 deletions
diff --git a/Kodi.xcodeproj/project.pbxproj b/Kodi.xcodeproj/project.pbxproj index ce5a7f7b84..ae7d472a80 100644 --- a/Kodi.xcodeproj/project.pbxproj +++ b/Kodi.xcodeproj/project.pbxproj @@ -272,6 +272,9 @@ 3994427F1A8DD96F006C39E9 /* VideoLibraryQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3994427D1A8DD96F006C39E9 /* VideoLibraryQueue.cpp */; }; 399442801A8DD96F006C39E9 /* VideoLibraryQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3994427D1A8DD96F006C39E9 /* VideoLibraryQueue.cpp */; }; 399442811A8DD96F006C39E9 /* VideoLibraryQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3994427D1A8DD96F006C39E9 /* VideoLibraryQueue.cpp */; }; + 4260D5C71B67BB8F003F6F2D /* GUIWindowSplash.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4260D5C51B67BB8F003F6F2D /* GUIWindowSplash.cpp */; }; + 4260D5C81B67BB8F003F6F2D /* GUIWindowSplash.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4260D5C51B67BB8F003F6F2D /* GUIWindowSplash.cpp */; }; + 4260D5C91B67BB8F003F6F2D /* GUIWindowSplash.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4260D5C51B67BB8F003F6F2D /* GUIWindowSplash.cpp */; }; 42DAC16E1A6E789E0066B4C8 /* PVRActionListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42DAC16C1A6E789E0066B4C8 /* PVRActionListener.cpp */; }; 42DAC16F1A6E789E0066B4C8 /* PVRActionListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42DAC16C1A6E789E0066B4C8 /* PVRActionListener.cpp */; }; 42DAC1701A6E789E0066B4C8 /* PVRActionListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42DAC16C1A6E789E0066B4C8 /* PVRActionListener.cpp */; }; @@ -3607,6 +3610,8 @@ 3994426A1A8DD920006C39E9 /* VideoLibraryScanningJob.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoLibraryScanningJob.h; sourceTree = "<group>"; }; 3994427D1A8DD96F006C39E9 /* VideoLibraryQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VideoLibraryQueue.cpp; sourceTree = "<group>"; }; 3994427E1A8DD96F006C39E9 /* VideoLibraryQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoLibraryQueue.h; sourceTree = "<group>"; }; + 4260D5C51B67BB8F003F6F2D /* GUIWindowSplash.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GUIWindowSplash.cpp; sourceTree = "<group>"; }; + 4260D5C61B67BB8F003F6F2D /* GUIWindowSplash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GUIWindowSplash.h; sourceTree = "<group>"; }; 42DAC16B1A6E780C0066B4C8 /* IActionListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IActionListener.h; sourceTree = "<group>"; }; 42DAC16C1A6E789E0066B4C8 /* PVRActionListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PVRActionListener.cpp; sourceTree = "<group>"; }; 42DAC16D1A6E789E0066B4C8 /* PVRActionListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PVRActionListener.h; sourceTree = "<group>"; }; @@ -6671,6 +6676,8 @@ E38E18260D25F9FA00618676 /* GUIWindowScreensaver.h */, 7C89619013B6A16F003631FE /* GUIWindowScreensaverDim.cpp */, 7C89619113B6A16F003631FE /* GUIWindowScreensaverDim.h */, + 4260D5C51B67BB8F003F6F2D /* GUIWindowSplash.cpp */, + 4260D5C61B67BB8F003F6F2D /* GUIWindowSplash.h */, E38E18370D25F9FA00618676 /* GUIWindowStartup.cpp */, E38E18380D25F9FA00618676 /* GUIWindowStartup.h */, E38E18390D25F9FA00618676 /* GUIWindowSystemInfo.cpp */, @@ -10590,6 +10597,7 @@ 18B7C7C61294222E009E7A26 /* GUIIncludes.cpp in Sources */, 18B7C7C71294222E009E7A26 /* GUIInfoTypes.cpp in Sources */, 18B7C7C81294222E009E7A26 /* GUILabel.cpp in Sources */, + 4260D5C71B67BB8F003F6F2D /* GUIWindowSplash.cpp in Sources */, 18B7C7C91294222E009E7A26 /* GUILabelControl.cpp in Sources */, 18B7C7CA1294222E009E7A26 /* GUIListContainer.cpp in Sources */, 18B7C7CB1294222E009E7A26 /* GUIListGroup.cpp in Sources */, @@ -11559,6 +11567,7 @@ DFF0F2B817528350002DA3A4 /* imagefactory.cpp in Sources */, DFF0F2B917528350002DA3A4 /* IWindowManagerCallback.cpp in Sources */, DFF0F2BA17528350002DA3A4 /* JpegIO.cpp in Sources */, + 4260D5C91B67BB8F003F6F2D /* GUIWindowSplash.cpp in Sources */, DFF0F2BC17528350002DA3A4 /* LocalizeStrings.cpp in Sources */, DFF0F2BD17528350002DA3A4 /* MatrixGLES.cpp in Sources */, DFF0F2BE17528350002DA3A4 /* Shader.cpp in Sources */, @@ -13024,6 +13033,7 @@ E499156A174E65AB00741B6D /* ButtonTranslator.cpp in Sources */, E499156B174E65AB00741B6D /* InertialScrollingHandler.cpp in Sources */, E499156D174E65AB00741B6D /* KeyboardStat.cpp in Sources */, + 4260D5C81B67BB8F003F6F2D /* GUIWindowSplash.cpp in Sources */, E499156E174E65AB00741B6D /* SDLJoystick.cpp in Sources */, E499156F174E65AC00741B6D /* XBMC_keytable.cpp in Sources */, E4991574174E661400741B6D /* WinEventsIOS.mm in Sources */, diff --git a/addons/metadata.album.universal/addon.xml b/addons/metadata.album.universal/addon.xml index f462b2ecd8..9a23a05a0e 100644 --- a/addons/metadata.album.universal/addon.xml +++ b/addons/metadata.album.universal/addon.xml @@ -1,12 +1,11 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <addon id="metadata.album.universal" name="Universal Album Scraper" - version="2.4.0" + version="2.5.0" provider-name="Olympia, XBMC Foundation"> <requires> <import addon="xbmc.metadata" version="2.1.0"/> <import addon="metadata.common.allmusic.com" version="3.1.0"/> - <import addon="metadata.common.amazon.de" version="1.0.2"/> <import addon="metadata.common.fanart.tv" version="3.1.0"/> <import addon="metadata.common.musicbrainz.org" version="2.0.2"/> <import addon="metadata.common.theaudiodb.com" version="1.8.1"/> diff --git a/addons/metadata.album.universal/albumuniversal.xml b/addons/metadata.album.universal/albumuniversal.xml index c7d025edc0..c70f78be6f 100644 --- a/addons/metadata.album.universal/albumuniversal.xml +++ b/addons/metadata.album.universal/albumuniversal.xml @@ -33,10 +33,10 @@ <expression repeat="yes">id="([^"]*)"><title>([^<]*)</title><status>Official</status>(?:<packaging>[^<]*</packaging>)?<text-representation>(?:<language>[^<]*</language>)*(?:<script>[^<]*</script>)*</text-representation><artist-credit><name-credit(?:>)*(?:\sjoinphrase="[^"]*">)*(?:<name>[^<]*</name)*(?:>)*<artist\sid="[^"]*"><name>([^<]*)</name>(?:<sort-name>[^<]*</sort-name>)*(?:<disambiguation>[^<]*</disambiguation>)*(?:<alias-list>(?:<alias[^<]*</alias>)*</alias-list>)*</artist></name-credit>(?:<name-credit(?:>)*(?:\sjoinphrase="[^"]*">)*(?:<name>[^<]*</name)*(?:>)*<artist\sid="[^"]*"><name>[^<]*</name>(?:<sort-name>[^<]*</sort-name>)*(?:<disambiguation>[^<]*</disambiguation>)*(?:<alias-list>(?:<alias[^<]*</alias>)*</alias-list>)*</artist></name-credit>)*</artist-credit><release-group(?:\stype="[^"]*")*\sid="[^"]*">(?:<primary-type>[^<]*</primary-type>)*(?:<secondary-type-list>(?:<secondary-type>[^<]*</secondary-type>)+</secondary-type-list>)*</release-group><date>(\d{4})[^<]*</date>(?:<country>)*([^<]*)?.*?<track-list\scount="(\d+)</expression> </RegExp> <RegExp input="$$1" output="<entity><year>\5-\4-T#\6</year><artist>\3</artist><title>\2</title><url cache="mb-\1-album.xml">http://musicbrainz.org/ws/2/release/\1?inc=recordings+release-groups+artists+labels+ratings</url></entity>" dest="5+"> - <expression repeat="yes">id="([^"]*)" ext:score="[^"]*"><title>([^<]*)</title><status>Official</status>(?:<packaging>[^<]*</packaging>)?<text-representation>(?:<language>[^<]*</language>)*(?:<script>[^<]*</script>)*</text-representation><artist-credit><name-credit(?:>)*(?:\sjoinphrase="[^"]*">)*(?:<name>[^<]*</name)*(?:>)*<artist\sid="[^"]*"><name>([^<]*)</name>(?:<sort-name>[^<]*</sort-name>)*(?:<disambiguation>[^<]*</disambiguation>)*(?:<alias-list>(?:<alias[^<]*</alias>)*</alias-list>)*</artist></name-credit>(?:<name-credit(?:>)*(?:\sjoinphrase="[^"]*">)*(?:<name>[^<]*</name)*(?:>)*<artist\sid="[^"]*"><name>[^<]*</name>(?:<sort-name>[^<]*</sort-name>)*(?:<disambiguation>[^<]*</disambiguation>)*(?:<alias-list>(?:<alias[^<]*</alias>)*</alias-list>)*</artist></name-credit>)*</artist-credit><release-group\sid="[^"]*"\stype="Album">(?:<primary-type>[^<]*</primary-type>)*(?:<secondary-type-list>(?:<secondary-type>[^<]*</secondary-type>)+</secondary-type-list>)*</release-group><date>(\d{4})[^<]*</date>(?:<country>)*([^<]*)?.*?<track-list\scount="(\d+)</expression> + <expression repeat="yes">id="([^"]*)" ext:score="[^"]*"><title>([^<]*)</title><status>Official</status>(?:<disambiguation>[^<]*</disambiguation>)*(?:<packaging>[^<]*</packaging>)?<text-representation>(?:<language>[^<]*</language>)*(?:<script>[^<]*</script>)*</text-representation><artist-credit><name-credit(?:>)*(?:\sjoinphrase="[^"]*">)*(?:<name>[^<]*</name)*(?:>)*<artist\sid="[^"]*"><name>([^<]*)</name>(?:<sort-name>[^<]*</sort-name>)*(?:<disambiguation>[^<]*</disambiguation>)*(?:<alias-list>(?:<alias[^<]*</alias>)*</alias-list>)*</artist></name-credit>(?:<name-credit(?:>)*(?:\sjoinphrase="[^"]*">)*(?:<name>[^<]*</name)*(?:>)*<artist\sid="[^"]*"><name>[^<]*</name>(?:<sort-name>[^<]*</sort-name>)*(?:<disambiguation>[^<]*</disambiguation>)*(?:<alias-list>(?:<alias[^<]*</alias>)*</alias-list>)*</artist></name-credit>)*</artist-credit><release-group\sid="[^"]*"\stype="Album">(?:<primary-type>[^<]*</primary-type>)*(?:<secondary-type-list>(?:<secondary-type>[^<]*</secondary-type>)+</secondary-type-list>)*</release-group><date>(\d{4})[^<]*</date>(?:<country>)*([^<]*)?.*?<track-list\scount="(\d+)</expression> </RegExp> <RegExp input="$$1" output="<entity><year>\5-\4-T#\6</year><artist>\3</artist><title>\2</title><url cache="mb-\1-album.xml">http://musicbrainz.org/ws/2/release/\1?inc=recordings+release-groups+artists+labels+ratings</url></entity>" dest="5+"> - <expression repeat="yes">id="([^"]*)" ext:score="[^"]*"><title>([^<]*)</title><status>Official</status>(?:<packaging>[^<]*</packaging>)?<text-representation>(?:<language>[^<]*</language>)*(?:<script>[^<]*<)*/script></text-representation><artist-credit><name-credit(?:>)*(?:\sjoinphrase="[^"]*">)*(?:<name>[^<]*</name)*(?:>)*<artist\sid="[^"]*"><name>([^<]*)</name>(?:<sort-name>[^<]*</sort-name>)*(?:<disambiguation>[^<]*</disambiguation>)*(?:<alias-list>(?:<alias[^<]*</alias>)*</alias-list>)*</artist></name-credit>(?:<name-credit(?:>)*(?:\sjoinphrase="[^"]*">)*(?:<name>[^<]*</name)*(?:>)*<artist\sid="[^"]*"><name>[^<]*</name>(?:<sort-name>[^<]*</sort-name>)*(?:<disambiguation>[^<]*</disambiguation>)*(?:<alias-list>(?:<alias[^<]*</alias>)*</alias-list>)*</artist></name-credit>)*</artist-credit><release-group\sid="[^"]*"(?:\stype="[^"]*")*>(?:<primary-type>[^<]*</primary-type>)*(?:<secondary-type-list>(?:<secondary-type>[^<]*</secondary-type>)+</secondary-type-list>)*</release-group><date>(\d{4})[^<]*</date>(?:<country>)*([^<]*)?.*?<track-list\scount="(\d+)</expression> + <expression repeat="yes">id="([^"]*)" ext:score="[^"]*"><title>([^<]*)</title><status>Official</status>(?:<disambiguation>[^<]*</disambiguation>)*(?:<packaging>[^<]*</packaging>)?<text-representation>(?:<language>[^<]*</language>)*(?:<script>[^<]*<)*/script></text-representation><artist-credit><name-credit(?:>)*(?:\sjoinphrase="[^"]*">)*(?:<name>[^<]*</name)*(?:>)*<artist\sid="[^"]*"><name>([^<]*)</name>(?:<sort-name>[^<]*</sort-name>)*(?:<disambiguation>[^<]*</disambiguation>)*(?:<alias-list>(?:<alias[^<]*</alias>)*</alias-list>)*</artist></name-credit>(?:<name-credit(?:>)*(?:\sjoinphrase="[^"]*">)*(?:<name>[^<]*</name)*(?:>)*<artist\sid="[^"]*"><name>[^<]*</name>(?:<sort-name>[^<]*</sort-name>)*(?:<disambiguation>[^<]*</disambiguation>)*(?:<alias-list>(?:<alias[^<]*</alias>)*</alias-list>)*</artist></name-credit>)*</artist-credit><release-group\sid="[^"]*"(?:\stype="[^"]*")*>(?:<primary-type>[^<]*</primary-type>)*(?:<secondary-type-list>(?:<secondary-type>[^<]*</secondary-type>)+</secondary-type-list>)*</release-group><date>(\d{4})[^<]*</date>(?:<country>)*([^<]*)?.*?<track-list\scount="(\d+)</expression> </RegExp> <RegExp input="$$1" output="<entity><year>\5-\4-T#\6</year><artist>\3</artist><title>\2</title><url cache="mb-\1-album.xml">http://musicbrainz.org/ws/2/release/\1?inc=recordings+release-groups+artists+labels+ratings</url></entity>" dest="5+"> <expression repeat="yes">id="([^"]*)"><title>([^<]*)</title><status>(?!Official)[^<]*</status>(?:<disambiguation>[^<]*</disambiguation>)*(?:<packaging>[^<]*</packaging>)?<text-representation>(?:<language>[^<]*</language>)*(?:<script>[^<]*</script>)*</text-representation><artist-credit><name-credit(?:>)*(?:\sjoinphrase="[^"]*">)*(?:<name>[^<]*</name)*(?:>)*<artist\sid="[^"]*"><name>([^<]*)</name>(?:<sort-name>[^<]*</sort-name>)*(?:<disambiguation>[^<]*</disambiguation>)*(?:<alias-list>(?:<alias[^<]*</alias>)*</alias-list>)*</artist></name-credit>(?:<name-credit(?:>)*(?:\sjoinphrase="[^"]*">)*(?:<name>[^<]*</name)*(?:>)*<artist\sid="[^"]*"><name>[^<]*</name>(?:<sort-name>[^<]*</sort-name>)*(?:<disambiguation>[^<]*</disambiguation>)*(?:<alias-list>(?:<alias[^<]*</alias>)*</alias-list>)*</artist></name-credit>)*</artist-credit><release-group\stype="Album"\sid="[^"]*">(?:<primary-type>[^<]*</primary-type>)*(?:<secondary-type-list>(?:<secondary-type>[^<]*</secondary-type>)+</secondary-type-list>)*</release-group><date>(\d{4})[^<]*</date>(?:<country>)*([^<]*)?.*?<track-list\scount="(\d+)</expression> @@ -61,15 +61,18 @@ </RegExp> <!--MBID - release group--> <RegExp input="$$1" output="\1" dest="4"> - <expression><release-group type="[^"]*" id="([^"]*)"</expression> + <expression><release-group\stype="[^"]*"\sid="([^"]*)"</expression> + </RegExp> + <RegExp input="$$1" output="\1" dest="4+"> + <expression><release-group\sid="([^"]*)"\stype="[^"]*"</expression> </RegExp> <!--Album title--> <RegExp input="$$1" output="\1" dest="7"> - <expression trim="1"><release id="[^"]*"><title>([^<]*)<</expression> + <expression trim="1"><release\sid="[^"]*"><title>([^<]*)<</expression> </RegExp> <!--Artist name--> <RegExp input="$$1" output="\1" dest="8"> - <expression trim="1"><release id="[^"]*"><title>[^<]*<.*?<artist id="[^"]*"><name>([^<]*)<</expression> + <expression trim="1"><release\sid="[^"]*"><title>[^<]*<.*?<artist\sid="[^"]*"><name>([^<]*)<</expression> </RegExp> <RegExp input="$$3" output="<chain function="GetMBAlbumTitleByMBID">\1</chain>" dest="5"> <expression noclean="1">(.+)</expression> @@ -95,9 +98,6 @@ <RegExp input="$INFO[albumreviewsource]" output="<chain function="GetTADBAlbumReviewByMBID">$$4</chain>" dest="5+"> <expression>TheAudioDb.com</expression> </RegExp> - <RegExp input="$INFO[albumreviewsource]" output="<url function="GetAmazonDEAlbumReview">http://musicbrainz.org/ws/2/release-group/$$4?inc=url-rels</url>" dest="5+"> - <expression>amazon.de</expression> - </RegExp> <RegExp input="$INFO[albumratingsource]" output="<chain function="GetMBAlbumRatingByMBID">$$3</chain>" dest="5+"> <expression>MusicBrainz</expression> </RegExp> @@ -122,14 +122,14 @@ <RegExp input="$INFO[albumthemessource]" output="<url function="GetAMGAlbumThemes" cache="mb-$$4-rg.xml">http://musicbrainz.org/ws/2/release-group/$$4?inc=url-rels</url>" dest="5+"> <expression>allmusic.com</expression> </RegExp> - <RegExp conditional="fanarttvalbumthumbs" input="$$1" output="<chain function="GetFanartTvAlbumThumbsByMBID">$$4</chain>" dest="5+"> - <expression noclean="1" /> + <RegExp conditional="fanarttvalbumthumbs" input="$$4" output="<chain function="GetFanartTvAlbumThumbsByMBID">\1</chain>" dest="5+"> + <expression noclean="1">(.+)</expression> </RegExp> - <RegExp conditional="tadbalbumthumbs" input="$$1" output="<chain function="GetTADBAlbumThumbsByMBID">$$4</chain>" dest="5+"> - <expression noclean="1" /> + <RegExp conditional="tadbalbumthumbs" input="$$4" output="<chain function="GetTADBAlbumThumbsByMBID">\1</chain>" dest="5+"> + <expression noclean="1">(.+)</expression> </RegExp> - <RegExp conditional="allmusicalbumthumbs" input="$$1" output="<url function="GetAMGAlbumThumbs" cache="mb-$$4-rg.xml">http://musicbrainz.org/ws/2/release-group/$$4?inc=url-rels</url>" dest="5+"> - <expression noclean="1" /> + <RegExp conditional="allmusicalbumthumbs" input="$$4" output="<url function="GetAMGAlbumThumbs" cache="mb-\1-rg.xml">http://musicbrainz.org/ws/2/release-group/\1?inc=url-rels</url>" dest="5+"> + <expression noclean="1">(.+)</expression> </RegExp> <expression noclean="1" /> </RegExp> @@ -189,13 +189,4 @@ </RegExp> </GetAMGAlbumThumbs> - <GetAmazonDEAlbumReview dest="5"> - <RegExp input="$$2" output="<details>\1</details>" dest="5"> - <RegExp input="$$1" output="<chain function="GetAmazonDEAlbumReviewByASIN">\1</chain>" dest="2"> - <expression noclean="1">http://www.amazon.de/gp/product/([^<]*)</expression> - </RegExp> - <expression noclean="1" /> - </RegExp> - </GetAmazonDEAlbumReview> - </scraper> diff --git a/addons/metadata.album.universal/changelog.txt b/addons/metadata.album.universal/changelog.txt index 20dfa1d238..4099a482fc 100644 --- a/addons/metadata.album.universal/changelog.txt +++ b/addons/metadata.album.universal/changelog.txt @@ -1,3 +1,19 @@ +[B]2.5.0[/B] +Removed: amazon.de review + +[B]2.4.4[/B] +Fixed: Won't scrape MBID randomly +Re-introduced: Proper scraping of "Official" releases that may have a "disambiguation" attribute in musicbrainz. + +[B]2.4.3[/B] +Changed: Don't query artwork when mbid is missing (workaround - proper fix is needed) + +[B]2.4.2[/B] +Fixed: Revert changes done in 2.4.1 + +[B]2.4.1[/B] +Fixed: Proper scraping of "Official" releases that may have a "disambiguation" attribute in musicbrainz. + [B]2.4.0[/B] Changed: Language is now a selection list diff --git a/addons/metadata.album.universal/resources/settings.xml b/addons/metadata.album.universal/resources/settings.xml index 719f5bba0a..83c97d00b0 100644 --- a/addons/metadata.album.universal/resources/settings.xml +++ b/addons/metadata.album.universal/resources/settings.xml @@ -2,7 +2,7 @@ <settings> <category label="128"> <setting type="lsep" label="General Settings"/> - <setting label="30002" type="labelenum" values="TheAudioDb.com|amazon.de|None" id="albumreviewsource" default="TheAudioDb.com"/> + <setting label="30002" type="labelenum" values="TheAudioDb.com|None" id="albumreviewsource" default="TheAudioDb.com"/> <setting label="30003" type="select" values="cn|de|en|es|fr|hu|il|it|jp|nl|no|pl|pt|ru|se" id="tadbalbumlanguage" default="en" visible="eq(-1,0)"/> <setting type="sep"/> <setting label="30004" type="labelenum" values="MusicBrainz|allmusic.com|TheAudioDb.com|None" id="albumratingsource" default="MusicBrainz"/> diff --git a/addons/metadata.artists.universal/addon.xml b/addons/metadata.artists.universal/addon.xml index 89d1cad601..73d5d2eae2 100644 --- a/addons/metadata.artists.universal/addon.xml +++ b/addons/metadata.artists.universal/addon.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <addon id="metadata.artists.universal" name="Universal Artist Scraper" - version="3.6.0" + version="3.6.1" provider-name="Olympia, XBMC Foundation"> <requires> <import addon="xbmc.metadata" version="2.1.0"/> diff --git a/addons/metadata.artists.universal/artistuniversal.xml b/addons/metadata.artists.universal/artistuniversal.xml index b67027f780..7328695964 100644 --- a/addons/metadata.artists.universal/artistuniversal.xml +++ b/addons/metadata.artists.universal/artistuniversal.xml @@ -49,7 +49,10 @@ <RegExp input="$$5" output="<details>\1</details>" dest="3"> <!--MBID - Artist--> <RegExp input="$$1" output="\1" dest="8"> - <expression noclean="1"><artist(?:\stype="[^"]*")* id="([^"]*)"><name>([^<]*)</expression> + <expression noclean="1"><artist(?:\stype="[^"]*")*\sid="([^"]*)"><name>([^<]*)</expression> + </RegExp> + <RegExp input="$$1" output="\1" dest="8+"> + <expression noclean="1"><artist\sid="([^"]*)"(?:\stype="[^"]*")*><name>([^<]*)</expression> </RegExp> <!--AMGID - Artist--> <RegExp input="$$1" output="\2" dest="9"> @@ -59,22 +62,22 @@ <expression noclean="1"><artist(?:\stype="[^"]*")* id="([^"]*)"><name>([^<]*)</expression> </RegExp> <RegExp input="$$8" conditional="fanarttvthumbs" output="<chain function="GetFanartTvArtistThumbsByMBID">\1</chain>" dest="5+"> - <expression/> + <expression noclean="1">(.+)</expression> </RegExp> <RegExp input="$$8" conditional="tadbthumbs" output="<chain function="GetTADBArtistThumbsByMBID">$$8</chain>" dest="5+"> - <expression/> + <expression noclean="1">(.+)</expression> </RegExp> <RegExp input="$$8" conditional="htbthumbs" output="<chain function="GetHTBThumbsByMBID">\1</chain>" dest="5+"> - <expression/> + <expression noclean="1">(.+)</expression> </RegExp> <RegExp input="$$8" conditional="fanarttvfanart" output="<chain function="GetFanartTvArtistFanartsByMBID">\1</chain>" dest="5+"> - <expression/> + <expression noclean="1">(.+)</expression> </RegExp> <RegExp input="$$8" conditional="tadbfanart" output="<chain function="GetTADBArtistFanartsByMBID">$$8</chain>" dest="5+"> - <expression/> + <expression noclean="1">(.+)</expression> </RegExp> <RegExp input="$$8" conditional="htbfanart" output="<chain function="GetHTBFanartByMBID">\1</chain>" dest="5+"> - <expression/> + <expression noclean="1">(.+)</expression> </RegExp> <RegExp input="$$9" output="<chain function="GetAMGData">\1</chain>" dest="5+"> <expression noclean="1">(.+)</expression> @@ -140,7 +143,7 @@ <expression>allmusic.com</expression> </RegExp> <RegExp input="$$9" conditional="allmusicartistthumbs" output="<chain function="GetAMGArtistThumbsByAMGID">\1</chain>" dest="2+"> - <expression/> + <expression noclean="1">(.+)</expression> </RegExp> <expression noclean="1" /> </RegExp> diff --git a/addons/metadata.artists.universal/changelog.txt b/addons/metadata.artists.universal/changelog.txt index 5b6ef2877e..7c3cd46b48 100644 --- a/addons/metadata.artists.universal/changelog.txt +++ b/addons/metadata.artists.universal/changelog.txt @@ -1,3 +1,6 @@ +[B]3.6.1[/B] +Fixed: Won't scrape MBID randomly + [B]3.6.0[/B] Changed: Language is now a selection list diff --git a/addons/metadata.common.amazon.de/addon.xml b/addons/metadata.common.amazon.de/addon.xml deleted file mode 100644 index f8d0e8cb48..0000000000 --- a/addons/metadata.common.amazon.de/addon.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<addon id="metadata.common.amazon.de" - name="Amazon.de Scraper Library" - version="1.0.3" - provider-name="XBMC Foundation"> - <requires> - <import addon="xbmc.metadata" version="2.1.0"/> - </requires> - <extension point="xbmc.metadata.scraper.library" - library="amazonde.xml"/> - <extension point="xbmc.addon.metadata"> - <platform>all</platform> - <summary lang="en">amazon.de Scraper Library</summary> - <description lang="en">Download Music information from amazon.de</description> - </extension> -</addon> diff --git a/addons/metadata.common.amazon.de/amazonde.xml b/addons/metadata.common.amazon.de/amazonde.xml deleted file mode 100644 index 759116446b..0000000000 --- a/addons/metadata.common.amazon.de/amazonde.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<scraperfunctions> - <GetAmazonDEAlbumReviewByASIN dest="5"> - <RegExp input="$$1" output="<details><url function="ParseAmazonDEAlbumReview">http://www.amazon.de/exec/obidos/ASIN/\1</url></details>" dest="5"> - <expression noclean="1">(.+)</expression> - </RegExp> - </GetAmazonDEAlbumReviewByASIN> - <ParseAmazonDEAlbumReview dest="5"> - <RegExp input="$$2" output="<details>\1</details>" dest="5"> - <RegExp input="$$1" output="<review>\1</review>" dest="2"> - <expression fixchars="1">Kurzbeschreibung</h3>\s*<div class="productDescriptionWrapper">(.*?)<div class</expression> - </RegExp> - <expression noclean="1">(.+)</expression> - </RegExp> - </ParseAmazonDEAlbumReview> -</scraperfunctions> diff --git a/addons/metadata.common.amazon.de/icon.png b/addons/metadata.common.amazon.de/icon.png Binary files differdeleted file mode 100644 index 8dae713749..0000000000 --- a/addons/metadata.common.amazon.de/icon.png +++ /dev/null diff --git a/addons/metadata.common.hdtrailers.net/addon.xml b/addons/metadata.common.hdtrailers.net/addon.xml deleted file mode 100644 index 592c4695ad..0000000000 --- a/addons/metadata.common.hdtrailers.net/addon.xml +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<addon id="metadata.common.hdtrailers.net" - name="HD-Trailers common scraper functions" - version="2.0.5" - provider-name="Olympia"> - <requires> - <import addon="xbmc.metadata" version="2.1.0"/> - </requires> - <extension point="xbmc.metadata.scraper.library" - library="hdtrailers.xml"/> - <extension point="xbmc.addon.metadata"> - <summary lang="en">HD-Trailers.net Scraper Library</summary> - <summary lang="de">Scraper für Trailer von HD-Trailers.net</summary> - <summary lang="es">Scraper de Trailers de HD-Trailers.net</summary> - <summary lang="fr">Scraper HD-Trailers.net pour les bande-annonces</summary> - <summary lang="hu">HD-Trailers.net leolvasó-könyvtár</summary> - <summary lang="nl">HD-Trailers.net Scraper Collectie</summary> - <summary lang="pl">Scraper zwiastunów HD-Trailers.net</summary> - <summary lang="pt">Scraper de trailers de HD-Trailers.net</summary> - <summary lang="ru">Обработчик для трейлеров с HD-Trailers.net</summary> - <summary lang="zh">HD-Trailers.net刮削器代码库</summary> - <description lang="en">Download Movie Trailers from www.hd-trailers.net</description> - <description lang="de">Downloade Trailer von www.hd-trailers.net</description> - <description lang="es">Descarga trailers de www.hd-trailers.net</description> - <description lang="fr">Télécharge les bande-annonces de films depuis www.hd-trailers.net</description> - <description lang="hu">Filmelőzetesek letöltése a www.hd-trailers.net-ről</description> - <description lang="nl">Download trailers van www.hd-trailers.net</description> - <description lang="pl">Pobieraj zwiastuny filmowe z www.hd-trailers.net</description> - <description lang="pt">Descarregar trailers de www.hd-trailers.net</description> - <description lang="ru">Загружать трейлеры с www.hd-trailers.net</description> - <description lang="zh">从www.hd-trailers.net下载电影预告片</description> - <platform>all</platform> - </extension> -</addon> diff --git a/addons/metadata.common.hdtrailers.net/hdtrailers.xml b/addons/metadata.common.hdtrailers.net/hdtrailers.xml deleted file mode 100644 index e0a0d775d2..0000000000 --- a/addons/metadata.common.hdtrailers.net/hdtrailers.xml +++ /dev/null @@ -1,66 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<scraperfunctions> - <GetHDTrailersnet480p dest="3"> - <RegExp input="$$6" output="<details><url function="Parse480pTrailer" cache="hd-trailers-\1.xml">http://xbmc.hd-trailers.net/movie/\1</url></details>" dest="3"> - <RegExp input="$$1" output="\1-" dest="6"> - <expression repeat="yes" trim="1">([\w]+)</expression> - </RegExp> - <expression noclean="1" /> - </RegExp> - </GetHDTrailersnet480p> - <GetHDTrailersnet720p dest="3"> - <RegExp input="$$6" output="<details><url function="Parse720pTrailer" cache="hd-trailers-\1.xml">http://xbmc.hd-trailers.net/movie/\1</url></details>" dest="3"> - <RegExp input="$$1" output="\1-" dest="6"> - <expression repeat="yes" trim="1">([\w]+)</expression> - </RegExp> - <expression noclean="1" /> - </RegExp> - </GetHDTrailersnet720p> - <GetHDTrailersnet1080p dest="3"> - <RegExp input="$$6" output="<details><url function="Parse1080pTrailer" cache="hd-trailers-\1.xml">http://xbmc.hd-trailers.net/movie/\1</url></details>" dest="3"> - <RegExp input="$$1" output="\1-" dest="6"> - <expression repeat="yes" trim="1">([\w]+)</expression> - </RegExp> - <expression noclean="1" /> - </RegExp> - </GetHDTrailersnet1080p> - <Parse480pTrailer dest="5"> - <RegExp input="$$6" output="<details>\1</details>" dest="5"> - <!--fetch 480p trailer link from hdtrailers.net--> - <RegExp input="$$1" output="<trailer>http://pdl.stream.aol.com/\1</trailer>" dest="6"> - <expression noclean="1">http://pdl\.stream\.aol\.com/([^"]*?_480p_dl.mov)"\srel="lightbox\[res480p</expression> - </RegExp> - <expression noclean="1" /> - </RegExp> - </Parse480pTrailer> - <Parse720pTrailer dest="5"> - <RegExp input="$$6" output="<details>\1</details>" dest="5"> - <!--Fallback to fetch 480p trailer link if 720p is not available--> - <RegExp input="$$1" output="<trailer>http://pdl.stream.aol.com/\1</trailer>" dest="6"> - <expression noclean="1">http://pdl\.stream\.aol\.com/([^"]*?_480p_dl.mov)"\srel="lightbox\[res480p</expression> - </RegExp> - <!--Fetch 720p trailer link from hdtrailers.net--> - <RegExp input="$$1" output="<trailer>http://pdl.stream.aol.com/\1</trailer>" dest="6"> - <expression noclean="1">http://pdl\.stream\.aol\.com/([^"]*?_720p_dl.mov)"\srel="lightbox\[res720p</expression> - </RegExp> - <expression noclean="1" /> - </RegExp> - </Parse720pTrailer> - <Parse1080pTrailer dest="5"> - <RegExp input="$$6" output="<details>\1</details>" dest="5"> - <!--Fallback to fetch 480p trailer link if 720p and 1080p are not available--> - <RegExp input="$$1" output="<trailer>http://pdl.stream.aol.com/\1</trailer>" dest="6"> - <expression noclean="1">http://pdl\.stream\.aol\.com/([^"]*?_480p_dl.mov)"\srel="lightbox\[res480p</expression> - </RegExp> - <!--Fetch 720p trailer link from hdtrailers.net--> - <RegExp input="$$1" output="<trailer>http://pdl.stream.aol.com/\1</trailer>" dest="6"> - <expression noclean="1">http://pdl\.stream\.aol\.com/([^"]*?_720p_dl.mov)"\srel="lightbox\[res720p</expression> - </RegExp> - <!--Fetch 1080p trailer link from hdtrailers.net--> - <RegExp input="$$1" output="<trailer>http://pdl.stream.aol.com/\1</trailer>" dest="6"> - <expression noclean="1">http://pdl\.stream\.aol\.com/([^"]*?_1080p_dl.mov)"\srel="lightbox\[res1080p</expression> - </RegExp> - <expression noclean="1" /> - </RegExp> - </Parse1080pTrailer> -</scraperfunctions>
\ No newline at end of file diff --git a/addons/metadata.common.hdtrailers.net/icon.png b/addons/metadata.common.hdtrailers.net/icon.png Binary files differdeleted file mode 100644 index 1657e5752d..0000000000 --- a/addons/metadata.common.hdtrailers.net/icon.png +++ /dev/null diff --git a/addons/metadata.common.musicbrainz.org/addon.xml b/addons/metadata.common.musicbrainz.org/addon.xml index 995e280faa..e542774112 100644 --- a/addons/metadata.common.musicbrainz.org/addon.xml +++ b/addons/metadata.common.musicbrainz.org/addon.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <addon id="metadata.common.musicbrainz.org" name="MusicBrainz Scraper Library" - version="2.0.3" + version="2.0.4" provider-name="XBMC Foundation"> <requires> <import addon="xbmc.metadata" version="2.1.0"/> diff --git a/addons/metadata.common.musicbrainz.org/musicbrainz.xml b/addons/metadata.common.musicbrainz.org/musicbrainz.xml index 9f73aa38a8..61e39e4e1e 100644 --- a/addons/metadata.common.musicbrainz.org/musicbrainz.xml +++ b/addons/metadata.common.musicbrainz.org/musicbrainz.xml @@ -10,8 +10,8 @@ <RegExp input="" output="" dest="2"> <expression /> </RegExp> - <RegExp input="$$1" output="<album><year>\4</year><title>\2</title><label>\1</label></album>" dest="2"> - <expression repeat="yes" clear="yes" fixchars="1,2,3" noclean="1,2,3"> type="Album" id="([^"]*)"><title>([^<]*)</title><first-release-date(\s/)?>(\d{4})?</expression> + <RegExp input="$$1" output="<album><year>\5</year><title>\3</title><label>\1\2</label></album>" dest="2"> + <expression repeat="yes" clear="yes" fixchars="1,2,3" noclean="1,2,3">(?: id="([^"]*)")? type="Album"(?: id="([^"]*)")?><title>([^<]*)</title><first-release-date(\s/)?>(\d{4})?</expression> </RegExp> <expression noclean="1" /> </RegExp> diff --git a/addons/metadata.themoviedb.org/addon.xml b/addons/metadata.themoviedb.org/addon.xml index 846272214f..0ba464c889 100644 --- a/addons/metadata.themoviedb.org/addon.xml +++ b/addons/metadata.themoviedb.org/addon.xml @@ -1,12 +1,11 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <addon id="metadata.themoviedb.org" name="The Movie Database" - version="3.8.3" + version="3.8.4" provider-name="XBMC Foundation"> <requires> <import addon="xbmc.metadata" version="2.1.0"/> <import addon="metadata.common.imdb.com" version="2.7.8"/> - <import addon="metadata.common.hdtrailers.net" version="2.0.5"/> <import addon="metadata.common.themoviedb.org" version="2.13.1"/> <import addon="plugin.video.youtube" version="4.4.10" optional="true"/> </requires> diff --git a/addons/metadata.themoviedb.org/changelog.txt b/addons/metadata.themoviedb.org/changelog.txt index 6c32b33b32..5eeae098f0 100644 --- a/addons/metadata.themoviedb.org/changelog.txt +++ b/addons/metadata.themoviedb.org/changelog.txt @@ -1,3 +1,6 @@ +[B]3.8.4[/B] +- removed: option to scrape trailers from hd-trailers.net (it was broken) + [B]3.8.3[/B] - fixed: further fixes to the broken search results due to API changes diff --git a/addons/metadata.themoviedb.org/icon.png b/addons/metadata.themoviedb.org/icon.png Binary files differindex bed844b4e7..01337685ea 100644 --- a/addons/metadata.themoviedb.org/icon.png +++ b/addons/metadata.themoviedb.org/icon.png diff --git a/addons/metadata.themoviedb.org/resources/language/English (US)/strings.po b/addons/metadata.themoviedb.org/resources/language/English (US)/strings.po index 5d1cb8dec4..d6cd284953 100644 --- a/addons/metadata.themoviedb.org/resources/language/English (US)/strings.po +++ b/addons/metadata.themoviedb.org/resources/language/English (US)/strings.po @@ -20,10 +20,6 @@ msgctxt "#30000" msgid "Enable Fanart" msgstr "Enable Fanart" -msgctxt "#30001" -msgid "Prefer Trailer from HD-Trailers.net" -msgstr "Prefer Trailer from HD-Trailers.net" - msgctxt "#30002" msgid "Preferred Language" msgstr "Preferred Language" diff --git a/addons/metadata.themoviedb.org/resources/settings.xml b/addons/metadata.themoviedb.org/resources/settings.xml index b98da8dbd9..45ce0c7e19 100644 --- a/addons/metadata.themoviedb.org/resources/settings.xml +++ b/addons/metadata.themoviedb.org/resources/settings.xml @@ -3,7 +3,6 @@ <setting label="30005" type="bool" id="keeporiginaltitle" default="false"/> <setting label="30000" type="bool" id="fanart" default="true"/> <setting label="30004" type="bool" id="trailer" default="true"/> - <setting label="30001" type="labelenum" values="No|480p|720p|1080p" id="TrailerQ" default="No"/> <setting label="30002" type="select" values="bg|cs|da|de|el|en|es|fi|fr|he|hr|hu|it|ja|ko|nb|nl|no|pl|pt|ro|ru|sk|sl|sr|sv|th|tr|uk|zh" id="language" default="en"/> <setting label="30006" type="select" values="au|bg|cs|da|de|el|es|fi|fr|gb|he|hr|hu|it|ja|ko|nl|no|pl|pt|ru|sl|sv|th|tr|us|zh" id="tmdbcertcountry" default="us"/> <setting label="30003" type="labelenum" values="TMDb|IMDb" id="RatingS" default="TMDb"/> diff --git a/addons/metadata.themoviedb.org/tmdb.xml b/addons/metadata.themoviedb.org/tmdb.xml index 73c1fb2ff1..e256edcc10 100644 --- a/addons/metadata.themoviedb.org/tmdb.xml +++ b/addons/metadata.themoviedb.org/tmdb.xml @@ -113,24 +113,6 @@ <RegExp conditional="trailer" input="$$2" output="<chain function="GetTMDBTrailerByIdChain">$$2</chain>" dest="5+"> <expression /> </RegExp> - <RegExp input="$INFO[TrailerQ]" output="<chain function="GetHDTrailersnet480p">$$6</chain>" dest="5+"> - <RegExp input="$$1" output="\1" dest="6"> - <expression clear="yes" noclean="1">"original_title":"([^"]*)</expression> - </RegExp> - <expression>480p</expression> - </RegExp> - <RegExp input="$INFO[TrailerQ]" output="<chain function="GetHDTrailersnet720p">$$6</chain>" dest="5+"> - <RegExp input="$$1" output="\1" dest="6"> - <expression clear="yes" noclean="1">"original_title":"([^"]*)</expression> - </RegExp> - <expression>720p</expression> - </RegExp> - <RegExp input="$INFO[TrailerQ]" output="<chain function="GetHDTrailersnet1080p">$$6</chain>" dest="5+"> - <RegExp input="$$1" output="\1" dest="6"> - <expression clear="yes" noclean="1">"original_title":"([^"]*)</expression> - </RegExp> - <expression>1080p</expression> - </RegExp> <expression noclean="1" /> </RegExp> </GetDetails> diff --git a/addons/metadata.tvdb.com/addon.xml b/addons/metadata.tvdb.com/addon.xml index 6cb7cfda0d..90e83f3e25 100644 --- a/addons/metadata.tvdb.com/addon.xml +++ b/addons/metadata.tvdb.com/addon.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <addon id="metadata.tvdb.com" name="The TVDB" - version="1.8.1" + version="1.8.2" provider-name="XBMC Foundation"> <requires> <import addon="xbmc.metadata" version="2.1.0"/> diff --git a/addons/metadata.tvdb.com/changelog.txt b/addons/metadata.tvdb.com/changelog.txt index 1f8c093445..711648cbf0 100644 --- a/addons/metadata.tvdb.com/changelog.txt +++ b/addons/metadata.tvdb.com/changelog.txt @@ -1,3 +1,6 @@ +[B]1.8.2[/B] +- Fixed: Runtime being zero in some cases + [B]1.8.1[/B] - removed unsupported languages diff --git a/addons/metadata.tvdb.com/tvdb.xml b/addons/metadata.tvdb.com/tvdb.xml index 28538363dd..4e3dd3ea9b 100644 --- a/addons/metadata.tvdb.com/tvdb.xml +++ b/addons/metadata.tvdb.com/tvdb.xml @@ -83,7 +83,7 @@ <RegExp input="$$5" output="\1" dest="11"> <expression clear="yes"><IMDB_ID>([^<]+)</IMDB_ID></expression> </RegExp> - <RegExp input="$$11"> + <RegExp input="$$11" output="\1" dest="13"> <RegExp conditional="fallback" input="$$5" output="<rating>\1</rating>" dest="13+"> <expression><Rating>([^<]+)</Rating></expression> </RegExp> @@ -329,7 +329,7 @@ <RegExp input="$$8" output="\1" dest="11"> <expression clear="yes"><IMDB_ID>([^<]+)</IMDB_ID></expression> </RegExp> - <RegExp input="$$11"> + <RegExp input="$$11" output="\1" dest="13"> <RegExp conditional="fallback" input="$$8" output="<rating>\1</rating>" dest="13+"> <expression><Rating>([^<]+)</Rating></expression> </RegExp> diff --git a/addons/repository.xbmc.org/addon.xml b/addons/repository.xbmc.org/addon.xml index fc29323ce4..3657e0a155 100644 --- a/addons/repository.xbmc.org/addon.xml +++ b/addons/repository.xbmc.org/addon.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <addon id="repository.xbmc.org" name="Kodi Add-on repository" - version="2.2.32" + version="2.2.33" provider-name="XBMC Foundation"> <requires> <import addon="xbmc.addon" version="12.0.0"/> @@ -76,7 +76,7 @@ <summary lang="sk_SK">Inštalovať rozšírenia z Kodi.tv</summary> <summary lang="sl_SI">Namestite dodatke s Kodi.tv</summary> <summary lang="sr_RS">Инсталирај додатке са Kodi.tv</summary> - <summary lang="sr_RS@latin">Instaliraj dodake sa Kodi-tv</summary> + <summary lang="sr_RS@latin">Instaliraj dodatne programe sa Kodi-tv</summary> <summary lang="sv_SE">Installera tillägg från Kodi.tv</summary> <summary lang="tg_TJ">Насб кардани барномаҳои иловагӣ аз Kodi.tv</summary> <summary lang="th_TH">ติดตั้งส่วนเสริมจาก Kodi.tv</summary> @@ -131,7 +131,7 @@ <description lang="sk_SK">Stiahnuť a nainštalovať rozšírenia z oficiálneho zdroja rozšírení Kodi.tv.[CR] Použitím oficiálneho zdroja získavate možnosť využiť rozsiahly systém zrkadiel, ktorý Vám umožní rýchlejšie sťahovanie z Vám blízkeho regiónu.[CR] Všetky rozšírenia v tomto zdroji boli podrobené základnému testovaniu. Ak nájdete poškodené alebo nefunkčné rozšírenie, oznámte to prosím týmu Kodi aby mohol podľa potreby zakročiť.</description> <description lang="sl_SI">Prenos in namestitev dodatkov iz uradnega skladišča Kodi.tv.[CR] Z uporabo uradnega skladišča, boste lahko izkoristili hitrejšo povezavo, ki bo izbrana glede na vašo lokacijo.[CR] Vsi dodatki tega skladišča so bili osnovno stestirani, če pa boste našli pokvarjen ali nedelujoč dodatek, to sporočite ekipi Kodi, da bomo lahko odpravili napake.</description> <description lang="sr_RS">Преузмите и инсталирајте додатке из Званичног Kodi.tv спремишта додатака.[CR] Коришћењем званичног Спремишта моћићете да искористите предности нашег сервиса копија фајлова који ће вам помоћи приликом бржег преузимања из региона ближег вашој локацији.[CR] Сви додаци у овом спремишту прошли су основно тестирање, у случају да пронађете неисправан додатак молимо вас да то пријавите Kodi тиму који ће затим предузети неопходне мере.</description> - <description lang="sr_RS@latin">Preuzmi i instaliraj dodatke iz Zvaničnog Kodi.tv spremišta za dodatke.[CR] Korišćenjem zvaničnog Spremišta moćićete da iskoristite prednosti našeg servisa kopija fajlova koji će vam pomoći prilikom bržeg preuzimanja iz regiona bližeg vašoj lokaciji.[CR] Svi dodaci u ovom spremištu prošli su osnovno testiranje, u slučaju da pronađete neispravan dodatak molimo vas da to prijavite Kodi timu koji će zatim preduzeti neophodne mere.</description> + <description lang="sr_RS@latin">Preuzmi i instaliraj dodatne programe iz Zvaničnog Kodi.tv spremišta za dodatne programe.[CR] Korišćenjem zvaničnog Spremišta moći ćete da iskoristite prednosti našeg servisa kopija fajlova koji će vam pomoći prilikom bržeg preuzimanja iz regiona bližeg vašoj lokaciji.[CR] Svi dodatni programi u ovom spremištu prošli su osnovno testiranje, u slučaju da pronađete neispravan dodatni program molimo vas da to prijavite Kodi timu koji će zatim preduzeti neophodne mere.</description> <description lang="sv_SE">Ladda ner och installera tillägg från det officiella Kodi.tv tilläggsförrådet.[CR]Genom att använda det officiella förrådet kommer du att få fördelen att kunna använda vår omfattande spegeltjänst som kommer att hjälpa dig till snabbare nedladdningar från en plats nära dig.[CR]Alla tillägg i detta förråd har genomgått grundläggande tester. Hittar du ett trasigt eller icke fungerande tillägg, vänligen meddela detta till Team-Kodi så att vi kan vidta nödvändiga åtgärder.</description> <description lang="tg_TJ">Барномаҳои иловагиро аз анбори нармафзори Kodi.tv боргирӣ кунед ва насб намоед.[CR] Аз истифодаи анбори нармафзори расмии мо ба шумо имконият пайдо мешавад, ки тавонед шароити мусофидро аз хидмати оинаи файлии васеъ ба даст оред ва нармафзори лозимиро аз сервери минтакаи ба шумо наздиктар бо суръати баланд боргирӣ кунед.[CR] Ҳамаи барномаҳо аз анбори нармафзори мо дар ҳолати санҷишӣ мебошанд, бинобар ин агар ягон барномаи иловагии нуқсондор ё вайроншударо ёбед, лутфан дар бораи он барнома ва нуқсон пайдошуда ба гурӯҳи кории Kodi гузориш диҳед, то ин ки мо тавонем ҳамаи камбудиҳои барномаҳои моро ҳал кунем.</description> <description lang="th_TH">ดาวน์โหลดและติดตั้งส่วนเสริม จากแหล่งข้อมูลโปรแกรมของ Kodi.tv อย่างเป็นทางการ.[CR] โดยการใช้งานแหล่งข้อมูลโปรแกรมอย่างเป็นทางการ คุณสามารถใช้ประโยชน์จากบริการแฟ้มมิเรอร์ที่กว้างขวางของเรา ที่จะช่วยให้การดาวน์โหลดของคุณเร็วขึ้นจากภูมิภาคที่ใกล้ที่สุด.[CR] ส่วนเสริม ทั้งหมดในแหล่งเก็บข้อมูลนี้ อยู่ภายใต้การทดสอบขั้นพื้นฐานแล้ว ถ้าคุณพบส่วนเสริมที่เสียหายหรือไม่ทำงาน กรุณาแจ้งทีมงาน Kodi เพื่อให้เราสามารถดำเนินการใด ๆ ที่จำเป็น.</description> @@ -187,7 +187,7 @@ <disclaimer lang="sk_SK">Team-Kodi nevytvoril všetky rozšírenia v tomto zdroji nie je zodpovedný za ich obsah</disclaimer> <disclaimer lang="sl_SI">Ekipa Kodi ni naredila vseh dodatkov v tem skladišču in ne odgovarja za njihovo vsebino</disclaimer> <disclaimer lang="sr_RS">Тим Kodi није направио све додатке у овом спремишту и није одговоран за њихов садржај</disclaimer> - <disclaimer lang="sr_RS@latin">Tim-Kodi nije napravio sve dodatke u ovom spremištu i nije odgovoran za njihov sadržaj</disclaimer> + <disclaimer lang="sr_RS@latin">Tim-Kodi nije napravio sve dodatne programe u ovom spremištu i nije odgovoran za njihov sadržaj</disclaimer> <disclaimer lang="sv_SE">Team-Kodi har inte gjort alla tillägg och är inte ansvariga för innehållet i dessa.</disclaimer> <disclaimer lang="tg_TJ">Гурӯҳи кории Kodi дар ин анбори нармафзор соҳиби ҳамаи барномаҳои иловагӣ намебошад ва барои мӯҳтавояшон ҷавобгар намебшад</disclaimer> <disclaimer lang="th_TH">ทีม Kodi ไม่ได้จัดทำ ส่วนเสริม ทั้งหมดในแหล่งข้อมูลโปรแกรมนี้ และจะไม่รับผิดชอบต่อเนื้อหาเหล่านั้น</disclaimer> diff --git a/addons/screensaver.rsxs.euphoria/addon.xml b/addons/screensaver.rsxs.euphoria/addon.xml index 67f3c8e1ab..7bca93f599 100644 --- a/addons/screensaver.rsxs.euphoria/addon.xml +++ b/addons/screensaver.rsxs.euphoria/addon.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <addon id="screensaver.rsxs.euphoria" - version="1.0.26" + version="1.0.27" name="Euphoria" provider-name="mogumbo, Team-Kodi"> <requires> @@ -47,6 +47,7 @@ <summary lang="lt_LT">Psihodelinė užsklanda nunešanti stoga</summary> <summary lang="lv_LV">Cik nu vien psihodēlisks ekrānsaudzētājs var būt</summary> <summary lang="mk_MK">Најпсиходелична заштита на екран</summary> + <summary lang="mn_MN">Дэлгэц хадгалагчийн хамгийн галзуу хувилбар.</summary> <summary lang="ms_MY">Perihal as psychedelic as screensavers get</summary> <summary lang="nb_NO">Så psykadelisk som en skjermsparer kan bli</summary> <summary lang="nl_NL">Een meer psychedelische schermbeveiliging vindt u niet</summary> @@ -100,6 +101,7 @@ <description lang="lt_LT">Tai stogą nunešanti psichodelinė užsklanda. Mogumbo galvojo, kad jo Plasma užsklandos niekas neperšoks, tačiau ši užsklanda tai kažkas tokio. Geriau susiraskite vieną iš tų lėktuvo maišelių, jei supykintų, prieš spoksant į tai per ilgai..</description> <description lang="lv_LV">Ekrānsaudzētājs nevarētu būt vēl vairāk psihodēlisks. mogumbo domāja, ka viņa "Plasma saver" bija saraksta augšgalā, bet šis ir vēl šķebinošāks. Labāk apsēdies un sameklē kādu maisņu nelabai dūšai pirms skaties šo pārāk ilgi.</description> <description lang="mk_MK">This is about as psychedelic as screensavers get. mogumbo thought his Plasma saver was at the top of the scale, but this one is even more nauseating. You'd better find one of those air sickness bags before you stare at this one for too long.</description> + <description lang="mn_MN">Дэлгэц хадгалагчийн хамгийн галзуу гэсэн хувилбар бол энэ. mogumbo ийн хийсэн Plasma дэлгэц хадгалагч хамгийн оргил дээд нь гэж бодож байсан боловч энэ бол бүр ч их толгой эргүүлмээр болсон. Энэ дэлгэцрүү удаан ширтэхээсээ өмнө онгоцонд өгдөг бөөлждөг уутыг урдаа бэлдсэн нь дээр байх.</description> <description lang="ms_MY">Ia mengenai as psychedelic as screensavers get. mogumbo berpendapat penyelamat Plasmanya adlaah yang terbaik, tetapi yang ini adalah lebih meloyakan. Oleh itu anda perlu cari beg muntah sebelum anda melihatnya dengan lebih lama.</description> <description lang="nb_NO">Dette er så psykadelisk som en skjermsparer kan bli. Mogumbo trodde hans Plasma skjermsparer var på toppen av skalaen, men denne er enda mer kvalmende. Du bør skaffe deg en sånn spypose som de deler ut på fly før du stirrer på denne for lenge.</description> <description lang="nl_NL">Ongetwijfeld de meest psychedelische screensaver. mogumbo dacht dat zijn Plasmascreensaver al bovenaan deze lijst stond, maar deze is nóg meer misselijkmakend. Houd uw braakzakje bij de hand, mocht u hier te lang naar staren.</description> diff --git a/addons/screensaver.rsxs.plasma/addon.xml b/addons/screensaver.rsxs.plasma/addon.xml index b454f77955..ee722516de 100644 --- a/addons/screensaver.rsxs.plasma/addon.xml +++ b/addons/screensaver.rsxs.plasma/addon.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <addon id="screensaver.rsxs.plasma" - version="1.0.26" + version="1.0.27" name="Plasma" provider-name="mogumbo, Team-Kodi"> <requires> @@ -50,7 +50,7 @@ <summary lang="ms_MY">Berkemungkinan penyelamat skrin kedua yang paling psikedelik</summary> <summary lang="nb_NO">Helt sikkert den nest mest psykedeliske skjermspareren som finnes</summary> <summary lang="nl_NL">Waarschijnlijk de op één na meest psychedelische schermbeveiliging ooit</summary> - <summary lang="pl_PL">Prawdopodobnie drugi, najbardziej psychodeliczny wygaszacz na świecie</summary> + <summary lang="pl_PL">Prawdopodobnie drugi najbardziej psychodeliczny wygaszacz na świecie</summary> <summary lang="pt_BR">Provavelmente a segunda mais psicodélica proteção de tela já vista</summary> <summary lang="pt_PT">Este é provavelmente o segundo melhor protector de ecrã psicadélico de sempre</summary> <summary lang="ro_RO">Probabil al doilea cel mai năucitor protector ecran care a existat vreodată</summary> diff --git a/addons/screensaver.xbmc.builtin.black/addon.xml b/addons/screensaver.xbmc.builtin.black/addon.xml index 94fdec03bb..f497f49db9 100644 --- a/addons/screensaver.xbmc.builtin.black/addon.xml +++ b/addons/screensaver.xbmc.builtin.black/addon.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <addon id="screensaver.xbmc.builtin.black" name="Black" - version="1.0.26" + version="1.0.27" provider-name="Team-Kodi"> <extension point="xbmc.ui.screensaver" library=""/> <extension point="xbmc.addon.metadata"> @@ -53,6 +53,7 @@ <summary lang="sk_SK">Šetrič obrazovky, ktorú ju zmení na čiernu</summary> <summary lang="sl_SI">Ohranjevalnik zaslona, ki počrni zaslon</summary> <summary lang="sr_RS">Чувар екрана који поцрни ваш екран</summary> + <summary lang="sr_RS@latin">Čuvar ekrana koji zacrni vaš ekran</summary> <summary lang="sv_SE">En skärmsläckare som gör din skärm svart</summary> <summary lang="tg_TJ">Пардаи экран бо таъсири «Пардаи экрани сиёҳ»</summary> <summary lang="th_TH">สกรีนเซฟเวอร์ที่จะพักหน้าจอของคุณให้เป็นสีดำ</summary> @@ -109,6 +110,7 @@ <description lang="sk_SK">Black je jednoduchý šetrič, ktorý zmení vašu obrazovku na čiernu.</description> <description lang="sl_SI">Black je enostaven ohranjevalnik zaslona, ki počrni zaslon.</description> <description lang="sr_RS">Black је једноставан чувар екрана који поцрни ваш екран.</description> + <description lang="sr_RS@latin">Crno je jednostavan čuvar ekrana koji će zacrniti vaš ekran.</description> <description lang="sv_SE">Detta är en enkel skärmsläckare som gör din skärm svart.</description> <description lang="tg_TJ">Ин пардаи экрани осон мебошад, ки таъсири «Пардаи экрани сиёҳ»-ро истифода мебарад.</description> <description lang="th_TH">หน้าจอสีดำเป็นสกรีนเซฟเวอร์แบบง่ายๆที่จะเปิดหน้าจอของคุณให้เป็นสีดำ</description> diff --git a/addons/screensaver.xbmc.builtin.dim/addon.xml b/addons/screensaver.xbmc.builtin.dim/addon.xml index 9ac810d09a..4a5428726d 100644 --- a/addons/screensaver.xbmc.builtin.dim/addon.xml +++ b/addons/screensaver.xbmc.builtin.dim/addon.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <addon id="screensaver.xbmc.builtin.dim" name="Dim" - version="1.0.26" + version="1.0.27" provider-name="Team-Kodi"> <extension point="xbmc.ui.screensaver" library=""/> <extension point="xbmc.addon.metadata"> @@ -53,6 +53,7 @@ <summary lang="sl_SI">Ohranjevalnik zaslona, ki zatemni zaslon</summary> <summary lang="sq_AL">Ruajtës ekrani, që errëson ekranin</summary> <summary lang="sr_RS">Чувар екрана који затамни ваш екран.</summary> + <summary lang="sr_RS@latin">Čuvar ekrana koji prigušuje vaš ekran</summary> <summary lang="sv_SE">En skärmsläckare som tonar ned din skärm</summary> <summary lang="tg_TJ">Пардаи экран бо таъсири «Пардаи экрани камнур»</summary> <summary lang="th_TH">สกรีนเซฟเวอร์ที่หรี่หน้าจอของคุณ</summary> @@ -109,6 +110,7 @@ <description lang="sl_SI">Dim je enostaven ohranjevalnik zaslona, ki zatemni zaslon do izbrane svetlosti med 20 in 100%.</description> <description lang="sq_AL">Errësuesi i ekranit është një mbrojtës i thjeshtë ekrani, i cili errëson (zbeh) ekranin tuaj në varësi të një vlere të axhustueshme nga 20 deri në 100%. </description> <description lang="sr_RS">Dim чувар екрана је једноставан чувар екрана који ће затамнети (постепено) ваш екран на подешену вредност између 20 и 100%.</description> + <description lang="sr_RS@latin">Čuvar ekrana Priguši je jednostavan čuvar ekrana koji će prigušiti (izbledeti) vaš ekran na podešenu vrednost između 20 i 100% .</description> <description lang="sv_SE">Detta är en enkel skärmsläckare som tonar ned ljusstyrkan på din skärm till ett angivet värde mellan 20 och 100%</description> <description lang="tg_TJ">Ин пардаи экран бо таъсири «Пардаи экрани камнур» хеле осон мебошад, ки сатҳи камнури экранро то дараҷае байни 20% ва 100% тағйир меёбад.</description> <description lang="th_TH">สกรีนเซฟเวอร์หรี่หน้าจอเป็นสกรีนเซฟเวอร์แบบพื้นฐานที่ช่วยหรี่หน้าจอของคุณซึ่งสามารถตั้งค่าการหรี่หน้าจอได้ตั้งแต่ 20% ถึง 100%</description> diff --git a/addons/service.xbmc.versioncheck/.gitignore b/addons/service.xbmc.versioncheck/.gitignore deleted file mode 100644 index ebbb77a1dc..0000000000 --- a/addons/service.xbmc.versioncheck/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -*.pyo -.project -.pydevproject -pysrc -*.pyc -.settings diff --git a/addons/service.xbmc.versioncheck/addon.xml b/addons/service.xbmc.versioncheck/addon.xml index 7dcfb04021..d8d3296040 100644 --- a/addons/service.xbmc.versioncheck/addon.xml +++ b/addons/service.xbmc.versioncheck/addon.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <addon id="service.xbmc.versioncheck" name="Version Check" - version="0.3.3" + version="0.3.6" provider-name="XBMC Foundation"> <requires> <import addon="xbmc.python" version="2.1.0"/> diff --git a/addons/service.xbmc.versioncheck/changelog.txt b/addons/service.xbmc.versioncheck/changelog.txt index e2a9d917cd..71a38a614d 100644 --- a/addons/service.xbmc.versioncheck/changelog.txt +++ b/addons/service.xbmc.versioncheck/changelog.txt @@ -1,3 +1,12 @@ +v0.3.6 +- Update version list + +v0.3.5 +- fix list + +v0.3.4 +- Update version list + v0.3.3 - Updated language files from Transifex - Update version list diff --git a/addons/service.xbmc.versioncheck/resources/versions.txt b/addons/service.xbmc.versioncheck/resources/versions.txt index 990b029945..63422c8e86 100644 --- a/addons/service.xbmc.versioncheck/resources/versions.txt +++ b/addons/service.xbmc.versioncheck/resources/versions.txt @@ -122,6 +122,24 @@ ], "releasecandidate": [ { + "major": "15", + "minor": "0", + "tag": "releasecandidate", + "tagversion":"2", + "revision": "20150711-0aa930b", + "extrainfo": "RC2", + "addon_support": "yes" + }, + { + "major": "15", + "minor": "0", + "tag": "releasecandidate", + "tagversion":"1", + "revision": "20150702-9ff25f8", + "extrainfo": "RC1", + "addon_support": "yes" + }, + { "major": "14", "minor": "0", "tag": "releasecandidate", @@ -226,6 +244,14 @@ "major": "15", "minor": "0", "tag": "beta", + "tagversion":"2", + "revision": "20150614-daedd5f", + "addon_support": "yes" + }, + { + "major": "15", + "minor": "0", + "tag": "beta", "tagversion":"1", "revision": "20150501-d1a2c33", "addon_support": "yes" diff --git a/addons/skin.confluence/720p/DialogProgress.xml b/addons/skin.confluence/720p/DialogProgress.xml index 146df69f1c..94c95577cc 100644 --- a/addons/skin.confluence/720p/DialogProgress.xml +++ b/addons/skin.confluence/720p/DialogProgress.xml @@ -37,7 +37,7 @@ <font>font13</font> <autoscroll time="3000" delay="4000" repeat="5000">true</autoscroll> </control> - <control type="progress"> + <control type="progress" id="20"> <description>Progressbar</description> <left>30</left> <top>148</top> diff --git a/addons/skin.confluence/720p/MyPVRRecordings.xml b/addons/skin.confluence/720p/MyPVRRecordings.xml index 00a36cfcd8..5c39911c90 100644 --- a/addons/skin.confluence/720p/MyPVRRecordings.xml +++ b/addons/skin.confluence/720p/MyPVRRecordings.xml @@ -112,19 +112,18 @@ <control type="image"> <left>730</left> <top>14</top> - <width>20</width> + <width>16</width> <height>16</height> - <texture>$INFO[ListItem.Overlay]</texture> - <aspectratio>keep</aspectratio> - <visible>!ListItem.IsResumable</visible> + <texture>OverlayWatching.png</texture> + <visible>ListItem.IsResumable</visible> </control> <control type="image"> <left>730</left> <top>14</top> - <width>16</width> + <width>20</width> <height>16</height> - <texture>OverlayWatching.png</texture> - <visible>ListItem.IsResumable</visible> + <texture>$INFO[ListItem.Overlay]</texture> + <aspectratio>keep</aspectratio> </control> </itemlayout> <focusedlayout height="40" width="760"> @@ -189,19 +188,18 @@ <control type="image"> <left>730</left> <top>14</top> - <width>20</width> + <width>16</width> <height>16</height> - <texture>$INFO[ListItem.Overlay]</texture> - <aspectratio>keep</aspectratio> - <visible>!ListItem.IsResumable</visible> + <texture>OverlayWatching.png</texture> + <visible>ListItem.IsResumable</visible> </control> <control type="image"> <left>730</left> <top>14</top> - <width>16</width> + <width>20</width> <height>16</height> - <texture>OverlayWatching.png</texture> - <visible>ListItem.IsResumable</visible> + <texture>$INFO[ListItem.Overlay]</texture> + <aspectratio>keep</aspectratio> </control> </focusedlayout> </control> diff --git a/addons/skin.confluence/720p/SmartPlaylistEditor.xml b/addons/skin.confluence/720p/SmartPlaylistEditor.xml index 761cc5ed1b..8e3f4ca075 100644 --- a/addons/skin.confluence/720p/SmartPlaylistEditor.xml +++ b/addons/skin.confluence/720p/SmartPlaylistEditor.xml @@ -145,7 +145,7 @@ <font>font12_title</font> <align>center</align> <aligny>center</aligny> - <onup>17</onup> + <onup>12</onup> <onleft>10</onleft> <onright>10</onright> <ondown>14</ondown> diff --git a/addons/skin.confluence/720p/ViewsFileMode.xml b/addons/skin.confluence/720p/ViewsFileMode.xml index 08852888fc..0b3be747e4 100644 --- a/addons/skin.confluence/720p/ViewsFileMode.xml +++ b/addons/skin.confluence/720p/ViewsFileMode.xml @@ -75,19 +75,19 @@ <control type="image"> <left>665</left> <top>14</top> - <width>20</width> + <width>16</width> <height>16</height> - <texture>$INFO[ListItem.Overlay]</texture> - <aspectratio>keep</aspectratio> - <visible>Window.IsVisible(Videos) + !ListItem.IsResumable</visible> + <texture>OverlayWatching.png</texture> + <visible>Window.IsVisible(Videos) + ListItem.IsResumable</visible> </control> <control type="image"> <left>665</left> <top>14</top> - <width>16</width> + <width>20</width> <height>16</height> - <texture>OverlayWatching.png</texture> - <visible>Window.IsVisible(Videos) + ListItem.IsResumable</visible> + <texture>$INFO[ListItem.Overlay]</texture> + <aspectratio>keep</aspectratio> + <visible>Window.IsVisible(Videos)</visible> </control> </itemlayout> <focusedlayout height="40" width="580"> @@ -168,19 +168,19 @@ <control type="image"> <left>665</left> <top>14</top> - <width>20</width> + <width>16</width> <height>16</height> - <texture>$INFO[ListItem.Overlay]</texture> - <aspectratio>keep</aspectratio> - <visible>Window.IsVisible(Videos) + !ListItem.IsResumable</visible> + <texture>OverlayWatching.png</texture> + <visible>Window.IsVisible(Videos) + ListItem.IsResumable</visible> </control> - <control type="image"> + <control type="image"> <left>665</left> <top>14</top> - <width>16</width> + <width>20</width> <height>16</height> - <texture>OverlayWatching.png</texture> - <visible>Window.IsVisible(Videos) + ListItem.IsResumable</visible> + <texture>$INFO[ListItem.Overlay]</texture> + <aspectratio>keep</aspectratio> + <visible>Window.IsVisible(Videos)</visible> </control> </focusedlayout> </control> @@ -575,19 +575,19 @@ <control type="image"> <left>1050</left> <top>14</top> - <width>20</width> + <width>16</width> <height>16</height> - <texture>$INFO[ListItem.Overlay]</texture> - <aspectratio>keep</aspectratio> - <visible>Window.IsVisible(Videos) + !ListItem.IsResumable</visible> + <texture>OverlayWatching.png</texture> + <visible>Window.IsVisible(Videos) + ListItem.IsResumable</visible> </control> <control type="image"> <left>1050</left> <top>14</top> - <width>16</width> + <width>20</width> <height>16</height> - <texture>OverlayWatching.png</texture> - <visible>Window.IsVisible(Videos) + ListItem.IsResumable</visible> + <texture>$INFO[ListItem.Overlay]</texture> + <aspectratio>keep</aspectratio> + <visible>Window.IsVisible(Videos)</visible> </control> </itemlayout> <focusedlayout height="40" width="1080"> @@ -676,19 +676,19 @@ <control type="image"> <left>1050</left> <top>14</top> - <width>20</width> + <width>16</width> <height>16</height> - <texture>$INFO[ListItem.Overlay]</texture> - <aspectratio>keep</aspectratio> - <visible>Window.IsVisible(Videos) + !ListItem.IsResumable</visible> + <texture>OverlayWatching.png</texture> + <visible>Window.IsVisible(Videos) + ListItem.IsResumable</visible> </control> <control type="image"> <left>1050</left> <top>14</top> - <width>16</width> + <width>20</width> <height>16</height> - <texture>OverlayWatching.png</texture> - <visible>Window.IsVisible(Videos) + ListItem.IsResumable</visible> + <texture>$INFO[ListItem.Overlay]</texture> + <aspectratio>keep</aspectratio> + <visible>Window.IsVisible(Videos)</visible> </control> </focusedlayout> </control> diff --git a/addons/skin.confluence/720p/ViewsVideoLibrary.xml b/addons/skin.confluence/720p/ViewsVideoLibrary.xml index 02ec2de473..d7de36c9fd 100644 --- a/addons/skin.confluence/720p/ViewsVideoLibrary.xml +++ b/addons/skin.confluence/720p/ViewsVideoLibrary.xml @@ -818,9 +818,17 @@ <control type="image"> <left>555</left> <top>14</top> - <width>20</width> + <width>16</width> <height>16</height> - <texture>$VAR[OverlayVar]</texture> + <texture>OverlayWatching.png</texture> + <visible>ListItem.IsResumable</visible> + </control> + <control type="image"> + <left>555</left> + <top>14</top> + <width>16</width> + <height>16</height> + <texture>$INFO[ListItem.Overlay]</texture> <aspectratio align="left">keep</aspectratio> </control> </itemlayout> @@ -889,9 +897,17 @@ <control type="image"> <left>555</left> <top>14</top> - <width>20</width> + <width>16</width> + <height>16</height> + <texture>OverlayWatching.png</texture> + <visible>ListItem.IsResumable</visible> + </control> + <control type="image"> + <left>555</left> + <top>14</top> + <width>16</width> <height>16</height> - <texture>$VAR[OverlayVar]</texture> + <texture>$INFO[ListItem.Overlay]</texture> <aspectratio align="left">keep</aspectratio> </control> </focusedlayout> @@ -1234,9 +1250,17 @@ <control type="image"> <left>555</left> <top>14</top> - <width>20</width> + <width>16</width> <height>16</height> - <texture>$VAR[OverlayVar]</texture> + <texture>OverlayWatching.png</texture> + <visible>ListItem.IsResumable</visible> + </control> + <control type="image"> + <left>555</left> + <top>14</top> + <width>16</width> + <height>16</height> + <texture>$INFO[ListItem.Overlay]</texture> <aspectratio align="left">keep</aspectratio> </control> </itemlayout> @@ -1305,9 +1329,17 @@ <control type="image"> <left>555</left> <top>14</top> - <width>20</width> + <width>16</width> + <height>16</height> + <texture>OverlayWatching.png</texture> + <visible>ListItem.IsResumable</visible> + </control> + <control type="image"> + <left>555</left> + <top>14</top> + <width>16</width> <height>16</height> - <texture>$VAR[OverlayVar]</texture> + <texture>$INFO[ListItem.Overlay]</texture> <aspectratio align="left">keep</aspectratio> </control> </focusedlayout> @@ -1595,19 +1627,18 @@ <control type="image"> <left>320</left> <top>14</top> - <width>20</width> + <width>16</width> <height>16</height> - <texture>$INFO[ListItem.Overlay]</texture> - <aspectratio>keep</aspectratio> - <visible>!ListItem.IsResumable</visible> + <texture>OverlayWatching.png</texture> + <visible>ListItem.IsResumable</visible> </control> <control type="image"> <left>320</left> <top>14</top> - <width>16</width> + <width>20</width> <height>16</height> - <texture>OverlayWatching.png</texture> - <visible>ListItem.IsResumable</visible> + <texture>$INFO[ListItem.Overlay]</texture> + <aspectratio>keep</aspectratio> </control> </itemlayout> <focusedlayout height="40" width="345"> @@ -1644,19 +1675,18 @@ <control type="image"> <left>320</left> <top>14</top> - <width>20</width> + <width>16</width> <height>16</height> - <texture>$INFO[ListItem.Overlay]</texture> - <aspectratio>keep</aspectratio> - <visible>!ListItem.IsResumable</visible> + <texture>OverlayWatching.png</texture> + <visible>ListItem.IsResumable</visible> </control> <control type="image"> <left>320</left> <top>14</top> - <width>16</width> + <width>20</width> <height>16</height> - <texture>OverlayWatching.png</texture> - <visible>ListItem.IsResumable</visible> + <texture>$INFO[ListItem.Overlay]</texture> + <aspectratio>keep</aspectratio> </control> </focusedlayout> </control> diff --git a/addons/skin.confluence/720p/includes.xml b/addons/skin.confluence/720p/includes.xml index 94831a40d2..ce5ad24f2d 100644 --- a/addons/skin.confluence/720p/includes.xml +++ b/addons/skin.confluence/720p/includes.xml @@ -21,10 +21,6 @@ <value condition="!ListItem.IsStereoscopic">$INFO[ListItem.VideoResolution,flagging/lists/,.png]</value> <value>flagging/lists/3D.png</value> </variable> - <variable name="OverlayVar"> - <value condition="!ListItem.IsResumable">$INFO[ListItem.Overlay]</value> - <value>OverlayWatching.png</value> - </variable> <variable name="BannerThumb"> <value condition="!IsEmpty(ListItem.Art(banner))">$INFO[ListItem.Art(banner)]</value> <value>$INFO[ListItem.Icon]</value> diff --git a/addons/skin.confluence/addon.xml b/addons/skin.confluence/addon.xml index 705e930c7e..b4adb57f21 100644 --- a/addons/skin.confluence/addon.xml +++ b/addons/skin.confluence/addon.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <addon id="skin.confluence" - version="2.7.3" + version="2.7.4" name="Confluence" provider-name="Jezz_X, Team Kodi"> <requires> @@ -17,7 +17,7 @@ <summary lang="af_ZA">Confluence tema deur Jezz_X. (Kodi se standaard tema)</summary> <summary lang="ar_SA">جلد "كونفليونس" من صنع Jezz_x. (الجلد المبدأى لبرنامج إكس بى إم سى)</summary> <summary lang="be_BY">Confluence skin by Jezz_X. (Kodi's default skin)</summary> - <summary lang="bg_BG">Облик от Jezz_X. (стандартния за Kodi)</summary> + <summary lang="bg_BG">Confluence облик от Jezz_X. (стандартния облик за Kodi)</summary> <summary lang="ca_ES">Pell Confluence, per Jezz_X. (Pell per defecte del Kodi)</summary> <summary lang="cs_CZ">Vzhled Confluence od Jezz_X. (výchozí vzhled Kodi)</summary> <summary lang="cy_GB">Croen Confluence gan Jezz_X. (Croen rhagosodedig Kodi)</summary> diff --git a/addons/skin.confluence/changelog.txt b/addons/skin.confluence/changelog.txt index 0660497573..51fec94b3c 100644 --- a/addons/skin.confluence/changelog.txt +++ b/addons/skin.confluence/changelog.txt @@ -1,3 +1,7 @@ +[B]2.7.4[/B] + +- Updated language files from Transifex + [B]2.7.3[/B] - Updated language files from Transifex diff --git a/addons/skin.confluence/language/resource.language.bg_bg/strings.po b/addons/skin.confluence/language/resource.language.bg_bg/strings.po index 8efe0db36f..ef1d1a76c9 100644 --- a/addons/skin.confluence/language/resource.language.bg_bg/strings.po +++ b/addons/skin.confluence/language/resource.language.bg_bg/strings.po @@ -22,12 +22,16 @@ msgstr "Променете вашите" msgctxt "#31003" msgid "Power options" -msgstr "Изключи..." +msgstr "Настройки за захранване" msgctxt "#31004" msgid "Working..." msgstr "Работи..." +msgctxt "#31005" +msgid "Hide information" +msgstr "Скрий информацията" + msgctxt "#31006" msgid "View options" msgstr "Преглед на настройките" @@ -164,6 +168,10 @@ msgctxt "#31102" msgid "Background" msgstr "Фон" +msgctxt "#31103" +msgid "Show \"Paused\" in picture slideshow" +msgstr "Показвай \"На Пауза\" индикация при слайдшоу от снимки" + msgctxt "#31104" msgid "Play trailers in a window [COLOR=grey3](Video information dialogue only)[/COLOR]" msgstr "Възпроизвеждай трейлърите в прозореца [COLOR=grey3]Информация за видеото[/COLOR]" @@ -492,6 +500,10 @@ msgctxt "#31423" msgid "Select the profile that will be used at startup when the login screen is disabled." msgstr "Изберете кой профил да се ползва за влизане, когато екрана за вписване е изключен" +msgctxt "#31501" +msgid "Scheduled time" +msgstr "График" + msgctxt "#31502" msgid "TV" msgstr "Телевизия" @@ -516,6 +528,14 @@ msgctxt "#31509" msgid "Channel group" msgstr "Група канали" +msgctxt "#31510" +msgid "Timer set" +msgstr "Настройка на брояча" + +msgctxt "#31511" +msgid "Channel options" +msgstr "Настройки на канала" + msgctxt "#31901" msgid "36-hour forecast" msgstr "36 часова прогноза" diff --git a/addons/skin.confluence/language/resource.language.da_dk/strings.po b/addons/skin.confluence/language/resource.language.da_dk/strings.po index b7fcb3e560..442e3f4f60 100644 --- a/addons/skin.confluence/language/resource.language.da_dk/strings.po +++ b/addons/skin.confluence/language/resource.language.da_dk/strings.po @@ -16,6 +16,10 @@ msgstr "" "Language: da_DK\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgctxt "#31000" +msgid "Change your" +msgstr "Ændre din" + msgctxt "#31003" msgid "Power options" msgstr "Strømstyring" @@ -24,6 +28,10 @@ msgctxt "#31004" msgid "Working..." msgstr "Arbejder..." +msgctxt "#31005" +msgid "Hide information" +msgstr "Skjul information" + msgctxt "#31006" msgid "View options" msgstr "Visningsindstillinger" @@ -32,6 +40,10 @@ msgctxt "#31008" msgid "Full screen" msgstr "Fuld skærm" +msgctxt "#31009" +msgid "Total duration" +msgstr "Total tid" + msgctxt "#31022" msgid "Music - Files" msgstr "Musik - Filer" @@ -48,14 +60,30 @@ msgctxt "#31025" msgid "Items" msgstr "Emner" +msgctxt "#31026" +msgid "Misc options" +msgstr "Andre indstillinger" + msgctxt "#31027" msgid "Location" msgstr "Lokalitet" +msgctxt "#31028" +msgid "Poster wrap" +msgstr "Plakatvæg" + msgctxt "#31029" msgid "Fanart" msgstr "Fankunst" +msgctxt "#31031" +msgid "Pic thumbs" +msgstr "Blandet" + +msgctxt "#31032" +msgid "Image wrap" +msgstr "Billedvæg" + msgctxt "#31033" msgid "Info" msgstr "Info" @@ -64,6 +92,10 @@ msgctxt "#31039" msgid "Actions" msgstr "Handlinger" +msgctxt "#31040" +msgid "Now playing" +msgstr "Spiller nu" + msgctxt "#31042" msgid "PLAYING" msgstr "AFSPILLER" @@ -84,6 +116,10 @@ msgctxt "#31046" msgid "SEEKING" msgstr "SØGER" +msgctxt "#31048" +msgid "Visualisation presets" +msgstr "Visualiserings-forudindstillinger" + msgctxt "#31049" msgid "End time" msgstr "Sluttidspunkt" @@ -120,6 +156,10 @@ msgctxt "#31060" msgid "This file is stacked, select the part you want to play from." msgstr "Denne fil er kombineret. Vælg den del du vil afspille fra." +msgctxt "#31061" +msgid "Current selected" +msgstr "Nuværende valgte" + msgctxt "#31101" msgid "Home screen options" msgstr "Indstillinger til hjemmeskærmen" @@ -128,10 +168,26 @@ msgctxt "#31102" msgid "Background" msgstr "Baggrund" +msgctxt "#31103" +msgid "Show \"Paused\" in picture slideshow" +msgstr "Vis \"PAUSE\" i billeddiasshow" + +msgctxt "#31104" +msgid "Play trailers in a window [COLOR=grey3](Video information dialogue only)[/COLOR]" +msgstr "Afspil trailere i et vindue [COLOR=grey3](Kun videoinformationsdialog)[/COLOR]" + msgctxt "#31106" msgid "Miscellaneous options" msgstr "Diverse indstillinger" +msgctxt "#31107" +msgid "Hide flagging read from video filenames [COLOR=grey3](e.g. Blu-ray, HD-DVD)[/COLOR]" +msgstr "Skjul læsning af mærker fra videoers filnavne [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]" + +msgctxt "#31108" +msgid "Hide main menu buttons" +msgstr "Skjul knapper i Hovedmenu" + msgctxt "#31109" msgid "Enable custom background" msgstr "Aktiver brugerdefineret baggrund" @@ -148,6 +204,30 @@ msgctxt "#31112" msgid "Options" msgstr "Indstillinger" +msgctxt "#31116" +msgid "Show recently added albums" +msgstr "Vis nyligt tilføjede Albummer" + +msgctxt "#31117" +msgid "Show recently added videos" +msgstr "Vis nyligt tilføjede Videoer" + +msgctxt "#31118" +msgid "Home page programs submenu" +msgstr "Undermenu til programmer på startskærmen" + +msgctxt "#31119" +msgid "Hide background fanart" +msgstr "Skjul baggrundsfankunst" + +msgctxt "#31124" +msgid "Show background \"Now playing\" video" +msgstr "Vis \"Spiller nu\" i baggrunden for videoer" + +msgctxt "#31125" +msgid "Show background \"Now playing\" visualisation" +msgstr "Vis \"Spiller nu\" visualisering i baggrunden" + msgctxt "#31126" msgid "Play TV theme songs in video library (TvTunes add-on)" msgstr "Afspil kendingsmelodier til TV-serier i videobiblioteket (TvTunes add-on)" @@ -160,6 +240,26 @@ msgctxt "#31128" msgid "Lyrics" msgstr "Sangtekster" +msgctxt "#31129" +msgid "Hide fanart in full screen visualisation" +msgstr "Skjul Fanart i fuldskærmsvisning" + +msgctxt "#31132" +msgid "Lyrics add-on" +msgstr "Add-on til Sangtekster" + +msgctxt "#31134" +msgid "Home page \"Videos\" submenu" +msgstr "Undermenu til Videoer på Hjemmeskærmen" + +msgctxt "#31135" +msgid "Home page \"Music\" submenu" +msgstr "Undermenu til Musik på Hjemmeskærmen" + +msgctxt "#31136" +msgid "Home page \"Pictures\" submenu" +msgstr "Undermenu til Billeder på Hjemmeskærmen" + msgctxt "#31140" msgid "Music OSD" msgstr "Musik OSD" @@ -176,22 +276,94 @@ msgctxt "#31200" msgid "Shortcuts" msgstr "Genveje" +msgctxt "#31203" +msgid "Choose your song" +msgstr "Vælg din sang" + +msgctxt "#31205" +msgid "Lyrics source" +msgstr "Kilde til Sangtekster" + msgctxt "#31206" msgid "Found" msgstr "Fundet" +msgctxt "#31207" +msgid "Find more items" +msgstr "Find flere Emner" + +msgctxt "#31208" +msgid "Upcoming episodes" +msgstr "Kommende Afsnit" + +msgctxt "#31300" +msgid "Current temperature" +msgstr "Ønsket temperatur" + +msgctxt "#31301" +msgid "Last updated" +msgstr "Sidst Opdateret" + msgctxt "#31303" msgid "Data provider" msgstr "Dataleverandør" +msgctxt "#31307" +msgid "Hide fanart" +msgstr "Skjul Fankunst" + +msgctxt "#31308" +msgid "Movie details" +msgstr "Filmdetaljer" + +msgctxt "#31309" +msgid "Memory used:" +msgstr "Hukommelse i brug:" + +msgctxt "#31310" +msgid "Track number" +msgstr "Spornummer" + msgctxt "#31311" msgid "Fanart image[CR][CR]Unavailable[CR][CR] Click button to set" msgstr "Fankunstbillede[CR][CR]ikke tilgængeligt[CR][CR] Tryk på knap for at vælge" +msgctxt "#31312" +msgid "Current scraper" +msgstr "Nuværende Scraper" + +msgctxt "#31313" +msgid "Choose a scraper" +msgstr "Vælg en Scraper" + +msgctxt "#31314" +msgid "Content scanning options" +msgstr "Indstillinger for indholdsskanning" + +msgctxt "#31317" +msgid "Set fanart path" +msgstr "Vælg sti til Fankunst" + +msgctxt "#31319" +msgid "Selected profile" +msgstr "Valgt Profil" + +msgctxt "#31320" +msgid "Last logged in" +msgstr "Sidst logget ind" + +msgctxt "#31321" +msgid "Karaoke song selector" +msgstr "Sangvalg til Karaoke" + msgctxt "#31322" msgid "Aired" msgstr "Sendt" +msgctxt "#31325" +msgid "Playlist options" +msgstr "Indstillinger for Afspilningsliste" + msgctxt "#31326" msgid "Created" msgstr "Oprettet" @@ -208,6 +380,14 @@ msgctxt "#31329" msgid "[B]Timer set![/B] [COLOR=grey2] - System auto shutdown in[/COLOR]" msgstr "[B]Optagelse indstillet![/B] [COLOR=grey2] - Systemet lukker ned om[/COLOR]" +msgctxt "#31330" +msgid "Click button to play[CR][CR]movie trailer" +msgstr "Klik på en knap for at afspille[CR][CR]Filmtrailer" + +msgctxt "#31331" +msgid "Album details" +msgstr "Albumdetaljer" + msgctxt "#31351" msgid "Pause" msgstr "Pause" @@ -216,6 +396,10 @@ msgctxt "#31352" msgid "Stop" msgstr "Stop" +msgctxt "#31353" +msgid "Fast forward" +msgstr "Spol Frem" + msgctxt "#31354" msgid "Rewind" msgstr "Spol Tilbage" @@ -224,6 +408,10 @@ msgctxt "#31355" msgid "Movie menu" msgstr "Filmmenu" +msgctxt "#31356" +msgid "Download subtitles" +msgstr "Hent Undertekster" + msgctxt "#31360" msgid "Watch as 2D" msgstr "Se i 2D" @@ -240,6 +428,10 @@ msgctxt "#31390" msgid "Skin default" msgstr "Skinnets standard" +msgctxt "#31391" +msgid "Skin default with no caps" +msgstr "Skinnets standard uden store bogstaver" + msgctxt "#31392" msgid "Arial based" msgstr "Baseret på Arial" @@ -256,10 +448,22 @@ msgctxt "#31402" msgid "[B]CONFIGURE MUSIC SETTINGS[/B][CR][CR]Manage your music library · Set music playback options · Change music listing options[CR]Setup song submission · Set karaoke options" msgstr "[B]KONFIGURER MUSIKINDSTILLINGER[/B][CR][CR]Administrer dit musikbibliotek · Vælg indstillinger for musikafspilning · Skift indstillinger for musikoversigt[CR]Opsæt sangindsendelse · Vælg karaoke-indstillinger" +msgctxt "#31403" +msgid "[B]CONFIGURE PICTURE SETTINGS[/B][CR][CR]Set picture listing options · Configure slideshow" +msgstr "[B]KONFIGURER BILLEDEINDSTILLINGER[/B][CR][CR]Vælg indstillinger for billedeoversigt · Konfigurer diasshow" + +msgctxt "#31404" +msgid "[B]CONFIGURE WEATHER SETTINGS[/B][CR][CR]Set various cities to collect weather information" +msgstr "[B]KONFIGURER VEJRINDSTILLINGER[/B][CR][CR]Du kan vælge tre byer, der skal hentes vejrudsigter for" + msgctxt "#31406" msgid "[B]CONFIGURE SYSTEM SETTINGS[/B][CR][CR]Setup and calibrate displays · Configure audio output · Setup remote controls[CR]Set power saving options · Enable debugging · Setup master lock" msgstr "[B]KONFIGURER SYSTEMINDSTILLINGER[/B][CR][CR]Indstil og kalibrer skærme · Konfigurer lydudgang · Opsæt fjernbetjeninger[CR]Opsæt strømstyring · Aktiver fejllogning · Opret hovedlås" +msgctxt "#31408" +msgid "[B]CONFIGURE ADD-ONS[/B][CR][CR]Manage your installed add-ons · Browse for and install add-ons from kodi.tv[CR]Modify add-on settings" +msgstr "[B]KONFIGURER ADD-ONS[/B][CR][CR]Administrer dine installerede Add-ons · Gennemse og installer Add-ons fra kodi.tv[CR]Tilpas indstillinger til Add-ons" + msgctxt "#31409" msgid "[B]CONFIGURE TV SETTINGS[/B][CR][CR]Change full screen info · Manage EPG data settings" msgstr "[B]KONFIGURER TV-INDSTILLINGER[/B][CR][CR]Skift fuldskærmsinfo · Administrer indstillinger for EPG" @@ -268,6 +472,14 @@ msgctxt "#31410" msgid "[B]CONFIGURE SERVICE SETTINGS[/B][CR][CR]Setup control of Kodi via UPnP and HTTP · Configure file sharing[CR]Enable Zeroconf · Configure AirPlay" msgstr "[B]KONFIGURER TJENESTER[/B][CR][CR]Opsæt styring af Kodi ved hjælp af UPnP og HTTP · Konfigurer fildeling[CR]Aktiver Zeroconf · Konfigurer AirPlay" +msgctxt "#31411" +msgid "First run help..." +msgstr "Prøv først hjælp..." + +msgctxt "#31412" +msgid "This tab signifies that there is a menu off to the side of this window that contains extra options for this section. To access the menu, navigate to the left with your remote control or keyboard or place your mouse pointer over the tab. [CR][CR]Click \"OK\" to close this dialogue. It will not appear again." +msgstr "Dette faneblad indikerer, at der er en menu i siden af dette vindue, som indeholder ekstra indstillinger til denne sektion.\nFor at få adgang til denne menu, skal du navigere til venstre med din fjernbetjening eller dit tastatur. Du kan også placere din musemarkør over fanebladet. [CR][CR]Tryk \"Ok\" for at lukke denne dialog. Den dukker ikke op igen." + msgctxt "#31413" msgid "Local subtitle available" msgstr "Undertekster på lokalt sprog tilgængelig" @@ -276,6 +488,10 @@ msgctxt "#31420" msgid "Login" msgstr "Login" +msgctxt "#31421" +msgid "Select your Kodi user profile[CR]to login and continue" +msgstr "Vælg din Kodi brugerprofil[CR]for at logge ind og fortsætte" + msgctxt "#31422" msgid "Show or hide the login screen at startup." msgstr "Vise eller skjule login-skærmen ved opstart." @@ -284,18 +500,66 @@ msgctxt "#31423" msgid "Select the profile that will be used at startup when the login screen is disabled." msgstr "Vælg den profil, der skal bruges ved opstart, når login-skærmen er deaktiveret." +msgctxt "#31501" +msgid "Scheduled time" +msgstr "Planlagt tid" + msgctxt "#31502" msgid "TV" msgstr "TV" +msgctxt "#31503" +msgid "Add group" +msgstr "Tilføj Gruppe" + +msgctxt "#31504" +msgid "Rename group" +msgstr "Omdøb Gruppe" + +msgctxt "#31505" +msgid "Delete group" +msgstr "Slet Gruppe" + msgctxt "#31506" msgid "Available[CR]Groups" msgstr "Tilgængelige[CR]Grupper" +msgctxt "#31509" +msgid "Channel group" +msgstr "Kanalgruppe" + +msgctxt "#31510" +msgid "Timer set" +msgstr "Indstil Optagelse" + +msgctxt "#31511" +msgid "Channel options" +msgstr "Kanalindstillinger" + +msgctxt "#31901" +msgid "36-hour forecast" +msgstr "36 timers vejrudsigt" + +msgctxt "#31902" +msgid "Hourly forecast" +msgstr "Vejrudsigt de næste timer" + +msgctxt "#31903" +msgid "Weekend forecast" +msgstr "Vejrudsigt for weekenden" + +msgctxt "#31904" +msgid "Daily forecast" +msgstr "Vejrudsigten for i dag" + msgctxt "#31905" msgid "Forecast" msgstr "Vejrudsigt" +msgctxt "#31908" +msgid "Chance of precipitation" +msgstr "Risiko for nedbør" + msgctxt "#31909" msgid "Fetching forecast info..." msgstr "Henter vejrudsigt..." diff --git a/addons/skin.confluence/language/resource.language.es_ar/strings.po b/addons/skin.confluence/language/resource.language.es_ar/strings.po index da6145df30..c591552b78 100644 --- a/addons/skin.confluence/language/resource.language.es_ar/strings.po +++ b/addons/skin.confluence/language/resource.language.es_ar/strings.po @@ -16,10 +16,22 @@ msgstr "" "Language: es_AR\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgctxt "#31000" +msgid "Change your" +msgstr "Modifique sus" + +msgctxt "#31003" +msgid "Power options" +msgstr "Opciones de energía" + msgctxt "#31004" msgid "Working..." msgstr "Cargando..." +msgctxt "#31005" +msgid "Hide information" +msgstr "Ocultar información" + msgctxt "#31006" msgid "View options" msgstr "Vista" @@ -28,6 +40,10 @@ msgctxt "#31008" msgid "Full screen" msgstr "Pantalla completa" +msgctxt "#31009" +msgid "Total duration" +msgstr "Duración total" + msgctxt "#31022" msgid "Music - Files" msgstr "Archivos - música" @@ -44,14 +60,30 @@ msgctxt "#31025" msgid "Items" msgstr "Elementos" +msgctxt "#31026" +msgid "Misc options" +msgstr "Opciones varias" + msgctxt "#31027" msgid "Location" msgstr "Ubicación" +msgctxt "#31028" +msgid "Poster wrap" +msgstr "Flujo de póster" + msgctxt "#31029" msgid "Fanart" msgstr "Fanart" +msgctxt "#31031" +msgid "Pic thumbs" +msgstr "Miniaturas" + +msgctxt "#31032" +msgid "Image wrap" +msgstr "Flujo de imagen" + msgctxt "#31033" msgid "Info" msgstr "Info" @@ -60,6 +92,10 @@ msgctxt "#31039" msgid "Actions" msgstr "Acciones" +msgctxt "#31040" +msgid "Now playing" +msgstr "Reproduciendo" + msgctxt "#31042" msgid "PLAYING" msgstr "REPRODUCIENDO" @@ -80,6 +116,10 @@ msgctxt "#31046" msgid "SEEKING" msgstr "BUSCANDO" +msgctxt "#31048" +msgid "Visualisation presets" +msgstr "Visualizaciones preestablecidas" + msgctxt "#31049" msgid "End time" msgstr "Hora de finalización" @@ -116,6 +156,10 @@ msgctxt "#31060" msgid "This file is stacked, select the part you want to play from." msgstr "Este archivo está agrupado, selecciona la parte desde la que desea reproducir." +msgctxt "#31061" +msgid "Current selected" +msgstr "Seleccionado" + msgctxt "#31101" msgid "Home screen options" msgstr "Opciones de la pantalla principal" @@ -124,10 +168,26 @@ msgctxt "#31102" msgid "Background" msgstr "Fondo" +msgctxt "#31103" +msgid "Show \"Paused\" in picture slideshow" +msgstr "Mostrar \"Pausa\" en modo presentación de imágenes" + +msgctxt "#31104" +msgid "Play trailers in a window [COLOR=grey3](Video information dialogue only)[/COLOR]" +msgstr "Reproducir avances en ventana [COLOR=grey3](Sólo diálogo de información de video)[/COLOR] " + msgctxt "#31106" msgid "Miscellaneous options" msgstr "Otras opciones" +msgctxt "#31107" +msgid "Hide flagging read from video filenames [COLOR=grey3](e.g. Blu-ray, HD-DVD)[/COLOR]" +msgstr "Ocultar marcas de lectura de archivos de video [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]" + +msgctxt "#31108" +msgid "Hide main menu buttons" +msgstr "Ocultar botones del menú principal" + msgctxt "#31109" msgid "Enable custom background" msgstr "Habilitar fondo personalizado" @@ -144,6 +204,30 @@ msgctxt "#31112" msgid "Options" msgstr "Opciones" +msgctxt "#31116" +msgid "Show recently added albums" +msgstr "Mostrar últimos discos añadidos" + +msgctxt "#31117" +msgid "Show recently added videos" +msgstr "Mostrar últimos videos añadidos" + +msgctxt "#31118" +msgid "Home page programs submenu" +msgstr "Submenú de programas de la pantalla principal" + +msgctxt "#31119" +msgid "Hide background fanart" +msgstr "Ocultar el Fanart del fondo" + +msgctxt "#31124" +msgid "Show background \"Now playing\" video" +msgstr "Mostrar video en reproducción en el fondo" + +msgctxt "#31125" +msgid "Show background \"Now playing\" visualisation" +msgstr "Mostrar visualización \"Reproduciendo ahora\" en el fondo" + msgctxt "#31126" msgid "Play TV theme songs in video library (TvTunes add-on)" msgstr "Reproducir canciones de series en la colección de video (complemento TvTunes)" @@ -156,6 +240,26 @@ msgctxt "#31128" msgid "Lyrics" msgstr "Letras" +msgctxt "#31129" +msgid "Hide fanart in full screen visualisation" +msgstr "Ocultar Fanart con visualizaciones a pantalla completa" + +msgctxt "#31132" +msgid "Lyrics add-on" +msgstr "Add-on para letras" + +msgctxt "#31134" +msgid "Home page \"Videos\" submenu" +msgstr "Submenú de videos de la pantalla principal" + +msgctxt "#31135" +msgid "Home page \"Music\" submenu" +msgstr "Submenú de música de la pantalla principal" + +msgctxt "#31136" +msgid "Home page \"Pictures\" submenu" +msgstr "Submenú \"Fotos\" de la pantalla principal" + msgctxt "#31140" msgid "Music OSD" msgstr "OSD de música" @@ -172,22 +276,94 @@ msgctxt "#31200" msgid "Shortcuts" msgstr "Accesos directos" +msgctxt "#31203" +msgid "Choose your song" +msgstr "Elija su canción" + +msgctxt "#31205" +msgid "Lyrics source" +msgstr "Fuente para letras" + msgctxt "#31206" msgid "Found" msgstr "Encontrados" +msgctxt "#31207" +msgid "Find more items" +msgstr "Encuentra más elementos" + +msgctxt "#31208" +msgid "Upcoming episodes" +msgstr "Próximos episodios" + +msgctxt "#31300" +msgid "Current temperature" +msgstr "Temperatura actual" + +msgctxt "#31301" +msgid "Last updated" +msgstr "Última actualización" + msgctxt "#31303" msgid "Data provider" msgstr "Proveedor de datos" +msgctxt "#31307" +msgid "Hide fanart" +msgstr "Ocultar fanart" + +msgctxt "#31308" +msgid "Movie details" +msgstr "Detalles de la película" + +msgctxt "#31309" +msgid "Memory used:" +msgstr "Memoria usada:" + +msgctxt "#31310" +msgid "Track number" +msgstr "Número de pista" + msgctxt "#31311" msgid "Fanart image[CR][CR]Unavailable[CR][CR] Click button to set" msgstr "Imagen fanart[CR][CR]no disponible[CR][CR]Click para elegir" +msgctxt "#31312" +msgid "Current scraper" +msgstr "Scraper actual" + +msgctxt "#31313" +msgid "Choose a scraper" +msgstr "Elige un scraper" + +msgctxt "#31314" +msgid "Content scanning options" +msgstr "Opciones de escanéo de contenido" + +msgctxt "#31317" +msgid "Set fanart path" +msgstr "Selecciona ruta del fanart" + +msgctxt "#31319" +msgid "Selected profile" +msgstr "Perfil seleccionado" + +msgctxt "#31320" +msgid "Last logged in" +msgstr "Último inicio de sesión" + +msgctxt "#31321" +msgid "Karaoke song selector" +msgstr "Selector de canción de karaoke" + msgctxt "#31322" msgid "Aired" msgstr "Estrenado" +msgctxt "#31325" +msgid "Playlist options" +msgstr "Opciones de lista de reproducción" + msgctxt "#31326" msgid "Created" msgstr "Creado" @@ -196,10 +372,22 @@ msgctxt "#31327" msgid "Resolution" msgstr "Resolución" +msgctxt "#31328" +msgid "Recently added" +msgstr "Añadidos/as recientemente" + msgctxt "#31329" msgid "[B]Timer set![/B] [COLOR=grey2] - System auto shutdown in[/COLOR]" msgstr "[B]Temporizador activado[/B] [COLOR=grey2] - El sistema se apagará en[/COLOR]" +msgctxt "#31330" +msgid "Click button to play[CR][CR]movie trailer" +msgstr "Click para reproducir[CR][CR]trailer de película" + +msgctxt "#31331" +msgid "Album details" +msgstr "Detalles del disco" + msgctxt "#31351" msgid "Pause" msgstr "Pausar" @@ -208,6 +396,10 @@ msgctxt "#31352" msgid "Stop" msgstr "Detener" +msgctxt "#31353" +msgid "Fast forward" +msgstr "Avance rápido" + msgctxt "#31354" msgid "Rewind" msgstr "Retroceder" @@ -216,6 +408,10 @@ msgctxt "#31355" msgid "Movie menu" msgstr "Menú película" +msgctxt "#31356" +msgid "Download subtitles" +msgstr "Descargar subtítulos" + msgctxt "#31360" msgid "Watch as 2D" msgstr "Mirar como 2D" @@ -232,6 +428,10 @@ msgctxt "#31390" msgid "Skin default" msgstr "Por defecto" +msgctxt "#31391" +msgid "Skin default with no caps" +msgstr "Por defecto sin Mayúsculas" + msgctxt "#31392" msgid "Arial based" msgstr "Basada en Arial" @@ -248,10 +448,22 @@ msgctxt "#31402" msgid "[B]CONFIGURE MUSIC SETTINGS[/B][CR][CR]Manage your music library · Set music playback options · Change music listing options[CR]Setup song submission · Set karaoke options" msgstr "[B]Configura las opciones de MÚSICA[/B][CR][CR]Administre su colección de música · Ajusta reproducción de música · Cambia opciones de listas de música[CR]Configura envío de canciones · Configura el karaoke" +msgctxt "#31403" +msgid "[B]CONFIGURE PICTURE SETTINGS[/B][CR][CR]Set picture listing options · Configure slideshow" +msgstr "[B]Configura las opciones de IMAGEN[/B][CR][CR]Cambia opciones de listas de imágenes - Configura presentación de diapositivas" + +msgctxt "#31404" +msgid "[B]CONFIGURE WEATHER SETTINGS[/B][CR][CR]Set various cities to collect weather information" +msgstr "[B]Configura las opciones de EL TIEMPO[/B][CR][CR]Establece varias ciudades para información meteorológica" + msgctxt "#31406" msgid "[B]CONFIGURE SYSTEM SETTINGS[/B][CR][CR]Setup and calibrate displays · Configure audio output · Setup remote controls[CR]Set power saving options · Enable debugging · Setup master lock" msgstr "[B]Configura las opciones de SISTEMA[/B][CR][CR]Configura y calibra la pantalla - Configura salida de audio - Configura mandos a distancia[CR]Establece las opciones de ahorro de energía - Habilita depuración de errores - Configura bloqueo maestro" +msgctxt "#31408" +msgid "[B]CONFIGURE ADD-ONS[/B][CR][CR]Manage your installed add-ons · Browse for and install add-ons from kodi.tv[CR]Modify add-on settings" +msgstr "[B]Configura los ADD-ONS[/B][CR][CR]Administre addons instalados · Busca e instala addons desde kodi.tv[CR]Modifica la configuración de los addons" + msgctxt "#31409" msgid "[B]CONFIGURE TV SETTINGS[/B][CR][CR]Change full screen info · Manage EPG data settings" msgstr "[B]CONFIGURAR OPCIONES DE TV[/B][CR][CR]Cambiar info pantalla completa · Especificar datos de guía GEP" @@ -260,6 +472,14 @@ msgctxt "#31410" msgid "[B]CONFIGURE SERVICE SETTINGS[/B][CR][CR]Setup control of Kodi via UPnP and HTTP · Configure file sharing[CR]Enable Zeroconf · Configure AirPlay" msgstr "[B]AJUSTES DE SERVICIOS[/B][CR][CR]Ajustes para controlar Kodi por UPnP y HTTP - Ajustes de archivos compartidos[CR]Activar Zeroconf - Ajustes de AirPlay" +msgctxt "#31411" +msgid "First run help..." +msgstr "Ayuda para la primera vez..." + +msgctxt "#31412" +msgid "This tab signifies that there is a menu off to the side of this window that contains extra options for this section. To access the menu, navigate to the left with your remote control or keyboard or place your mouse pointer over the tab. [CR][CR]Click \"OK\" to close this dialogue. It will not appear again." +msgstr "Esta pestaña significa que hay un menú oculto a un lado de esta ventana que contiene opciones adicionales para esta sección. Para acceder al menú, desplácese a la izquierda con el mando a distancia o el teclado o sitúe el puntero del ratón sobre la pestaña. [CR][CR] Haga clic en \"Aceptar\" para cerrar este cuadro de diálogo. Este no volverá a aparecer." + msgctxt "#31413" msgid "Local subtitle available" msgstr "Subtitulo local disponible" @@ -268,6 +488,10 @@ msgctxt "#31420" msgid "Login" msgstr "Ingresar" +msgctxt "#31421" +msgid "Select your Kodi user profile[CR]to login and continue" +msgstr "Seleccione su perfil de usuario de Kodi[CR]para ingresar y continuar" + msgctxt "#31422" msgid "Show or hide the login screen at startup." msgstr "Mostrar u ocultar la pantalla de ingreso al iniciar." @@ -276,18 +500,66 @@ msgctxt "#31423" msgid "Select the profile that will be used at startup when the login screen is disabled." msgstr "Seleccionar el perfil que se usará en el inicio cuando la pantalla de ingreso esta deshabilitada." +msgctxt "#31501" +msgid "Scheduled time" +msgstr "Hora programada" + msgctxt "#31502" msgid "TV" msgstr "TV" +msgctxt "#31503" +msgid "Add group" +msgstr "Añdadir Grupo" + +msgctxt "#31504" +msgid "Rename group" +msgstr "Renombrar Grupo" + +msgctxt "#31505" +msgid "Delete group" +msgstr "Borrar Grupo" + msgctxt "#31506" msgid "Available[CR]Groups" msgstr "Grupos[CR]disponibles" +msgctxt "#31509" +msgid "Channel group" +msgstr "Grupo de canales" + +msgctxt "#31510" +msgid "Timer set" +msgstr "Programar grabación" + +msgctxt "#31511" +msgid "Channel options" +msgstr "Opciones de canal" + +msgctxt "#31901" +msgid "36-hour forecast" +msgstr "Pronóstico de 36 hs" + +msgctxt "#31902" +msgid "Hourly forecast" +msgstr "Pronóstico por hora" + +msgctxt "#31903" +msgid "Weekend forecast" +msgstr "Pronóstico para el fin de semana" + +msgctxt "#31904" +msgid "Daily forecast" +msgstr "Pronóstico diario" + msgctxt "#31905" msgid "Forecast" msgstr "Pronóstico" +msgctxt "#31908" +msgid "Chance of precipitation" +msgstr "Probabilidad de precipitación" + msgctxt "#31909" msgid "Fetching forecast info..." msgstr "Obteniendo información meteorológica..." diff --git a/addons/skin.confluence/language/resource.language.es_mx/strings.po b/addons/skin.confluence/language/resource.language.es_mx/strings.po index 23825f0094..dcf34d3197 100644 --- a/addons/skin.confluence/language/resource.language.es_mx/strings.po +++ b/addons/skin.confluence/language/resource.language.es_mx/strings.po @@ -16,6 +16,10 @@ msgstr "" "Language: es_MX\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgctxt "#31000" +msgid "Change your" +msgstr "Cambiar al tuyo" + msgctxt "#31004" msgid "Working..." msgstr "Trabajando..." diff --git a/addons/skin.confluence/language/resource.language.fa_ir/strings.po b/addons/skin.confluence/language/resource.language.fa_ir/strings.po index db58094917..b455b8a51e 100644 --- a/addons/skin.confluence/language/resource.language.fa_ir/strings.po +++ b/addons/skin.confluence/language/resource.language.fa_ir/strings.po @@ -60,6 +60,10 @@ msgctxt "#31039" msgid "Actions" msgstr "عملیات" +msgctxt "#31040" +msgid "Now playing" +msgstr "در حال پخش" + msgctxt "#31042" msgid "PLAYING" msgstr "در حال پخش" @@ -152,6 +156,10 @@ msgctxt "#31128" msgid "Lyrics" msgstr "اشعار" +msgctxt "#31132" +msgid "Lyrics add-on" +msgstr "افزونه متن ترانه" + msgctxt "#31140" msgid "Music OSD" msgstr "موسیقی" @@ -212,6 +220,10 @@ msgctxt "#31355" msgid "Movie menu" msgstr "منو فیلم" +msgctxt "#31356" +msgid "Download subtitles" +msgstr "دانلود زیر نویس ها" + msgctxt "#31360" msgid "Watch as 2D" msgstr "تماشا بصورت دو بعدی" @@ -276,10 +288,34 @@ msgctxt "#31502" msgid "TV" msgstr "تلویزیون" +msgctxt "#31503" +msgid "Add group" +msgstr "افزودن گروه" + +msgctxt "#31504" +msgid "Rename group" +msgstr "تغییر نام گروه" + +msgctxt "#31505" +msgid "Delete group" +msgstr "حذف گروه" + msgctxt "#31506" msgid "Available[CR]Groups" msgstr "گروه های [CR]موجود" +msgctxt "#31901" +msgid "36-hour forecast" +msgstr "پیش بینی 36 ساعته" + +msgctxt "#31903" +msgid "Weekend forecast" +msgstr "پیش بینی هفتگی" + +msgctxt "#31904" +msgid "Daily forecast" +msgstr "پیش بینی روزانه" + msgctxt "#31905" msgid "Forecast" msgstr "پیش بینی" diff --git a/addons/skin.confluence/language/resource.language.fr_ca/strings.po b/addons/skin.confluence/language/resource.language.fr_ca/strings.po index e035be13ce..00fe4ee777 100644 --- a/addons/skin.confluence/language/resource.language.fr_ca/strings.po +++ b/addons/skin.confluence/language/resource.language.fr_ca/strings.po @@ -18,7 +18,7 @@ msgstr "" msgctxt "#31000" msgid "Change your" -msgstr "Changer vos" +msgstr "Changez vos" msgctxt "#31003" msgid "Power options" diff --git a/addons/skin.confluence/language/resource.language.he_il/strings.po b/addons/skin.confluence/language/resource.language.he_il/strings.po index 58903403f2..38007a618d 100644 --- a/addons/skin.confluence/language/resource.language.he_il/strings.po +++ b/addons/skin.confluence/language/resource.language.he_il/strings.po @@ -16,10 +16,22 @@ msgstr "" "Language: he_IL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgctxt "#31000" +msgid "Change your" +msgstr "שינוי" + +msgctxt "#31003" +msgid "Power options" +msgstr "אפשרויות חשמל" + msgctxt "#31004" msgid "Working..." msgstr "עסוק..." +msgctxt "#31005" +msgid "Hide information" +msgstr "הסתר פרטים" + msgctxt "#31006" msgid "View options" msgstr "אפשרויות תצוגה" @@ -28,6 +40,10 @@ msgctxt "#31008" msgid "Full screen" msgstr "מסך מלא" +msgctxt "#31009" +msgid "Total duration" +msgstr "אורך כולל" + msgctxt "#31022" msgid "Music - Files" msgstr "מוזיקה - קבצים" @@ -44,14 +60,30 @@ msgctxt "#31025" msgid "Items" msgstr "פריטים" +msgctxt "#31026" +msgid "Misc options" +msgstr "אפשרויות שונות" + msgctxt "#31027" msgid "Location" msgstr "מיקום" +msgctxt "#31028" +msgid "Poster wrap" +msgstr "רצועת פוסטרים" + msgctxt "#31029" msgid "Fanart" msgstr "פאנארט" +msgctxt "#31031" +msgid "Pic thumbs" +msgstr "תמונות ממוזערות" + +msgctxt "#31032" +msgid "Image wrap" +msgstr "רצועת תמונות" + msgctxt "#31033" msgid "Info" msgstr "פרטים" @@ -60,6 +92,10 @@ msgctxt "#31039" msgid "Actions" msgstr "פעולות" +msgctxt "#31040" +msgid "Now playing" +msgstr "מנגן כעת" + msgctxt "#31042" msgid "PLAYING" msgstr "מנגן" @@ -120,6 +156,10 @@ msgctxt "#31060" msgid "This file is stacked, select the part you want to play from." msgstr "קובץ זה שייך לערימה. יש לבחור חלק ממנו יתחיל הניגון." +msgctxt "#31061" +msgid "Current selected" +msgstr "כרגע מסומנים" + msgctxt "#31101" msgid "Home screen options" msgstr "אפשרויות מסך הבית" @@ -128,10 +168,26 @@ msgctxt "#31102" msgid "Background" msgstr "רקע" +msgctxt "#31103" +msgid "Show \"Paused\" in picture slideshow" +msgstr "הצג \"מושהה\" במצגת תמונות" + +msgctxt "#31104" +msgid "Play trailers in a window [COLOR=grey3](Video information dialogue only)[/COLOR]" +msgstr "נגן קדימונים בחלון [COLOR=grey3](דיאלוג פרטי וידאו בלבד)[/COLOR]" + msgctxt "#31106" msgid "Miscellaneous options" msgstr "אפשרויות שונות" +msgctxt "#31107" +msgid "Hide flagging read from video filenames [COLOR=grey3](e.g. Blu-ray, HD-DVD)[/COLOR]" +msgstr "הסתר סימון \"נצפה\" משמות קבצי וידאו [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]" + +msgctxt "#31108" +msgid "Hide main menu buttons" +msgstr "הסתר כפתורי תפריט ראשי" + msgctxt "#31109" msgid "Enable custom background" msgstr "אפשר רקע מותאם אישית" @@ -148,6 +204,30 @@ msgctxt "#31112" msgid "Options" msgstr "אפשרויות" +msgctxt "#31116" +msgid "Show recently added albums" +msgstr "הצג אלבומים שנוספו לאחרונה" + +msgctxt "#31117" +msgid "Show recently added videos" +msgstr "הצג וידאו שנוסף לאחרונה" + +msgctxt "#31118" +msgid "Home page programs submenu" +msgstr "תת תפריט תוכנות במסך הבית" + +msgctxt "#31119" +msgid "Hide background fanart" +msgstr "נטרל הצגת פאנארט כרקע" + +msgctxt "#31124" +msgid "Show background \"Now playing\" video" +msgstr "הצג וידאו \"מנגן כעת\" כרקע" + +msgctxt "#31125" +msgid "Show background \"Now playing\" visualisation" +msgstr "הצג חיזוי \"מנגן כעת\" כרקע" + msgctxt "#31126" msgid "Play TV theme songs in video library (TvTunes add-on)" msgstr "נגן נעימת סדרה בספריית הוידאו (הרחבת TvTunes)" @@ -160,6 +240,26 @@ msgctxt "#31128" msgid "Lyrics" msgstr "מילות שיר" +msgctxt "#31129" +msgid "Hide fanart in full screen visualisation" +msgstr "הסתר פאנארט כאשר חיזוי מוצג במסך מלא" + +msgctxt "#31132" +msgid "Lyrics add-on" +msgstr "הרחבת מילות שירים" + +msgctxt "#31134" +msgid "Home page \"Videos\" submenu" +msgstr "תת תפריט וידאו במסך הבית" + +msgctxt "#31135" +msgid "Home page \"Music\" submenu" +msgstr "תת תפריט מוזיקה במסך הבית" + +msgctxt "#31136" +msgid "Home page \"Pictures\" submenu" +msgstr "תת תפריט תמונות במסך הבית" + msgctxt "#31140" msgid "Music OSD" msgstr "מוזיקה - תפריט צף (OSD)" @@ -176,10 +276,30 @@ msgctxt "#31200" msgid "Shortcuts" msgstr "קיצורי דרך" +msgctxt "#31203" +msgid "Choose your song" +msgstr "בחירת השיר" + +msgctxt "#31205" +msgid "Lyrics source" +msgstr "מקור מילות שיר" + msgctxt "#31206" msgid "Found" msgstr "נמצא" +msgctxt "#31207" +msgid "Find more items" +msgstr "מציאת פריטים נוספים" + +msgctxt "#31208" +msgid "Upcoming episodes" +msgstr "הפרקים הקרובים" + +msgctxt "#31300" +msgid "Current temperature" +msgstr "טמפ' נוכחית" + msgctxt "#31301" msgid "Last updated" msgstr "עודכן לאחרונה" @@ -188,14 +308,62 @@ msgctxt "#31303" msgid "Data provider" msgstr "ספק מידע" +msgctxt "#31307" +msgid "Hide fanart" +msgstr "הסתר פאנארט" + +msgctxt "#31308" +msgid "Movie details" +msgstr "פרטי סרט" + +msgctxt "#31309" +msgid "Memory used:" +msgstr "זכרון בשימוש:" + +msgctxt "#31310" +msgid "Track number" +msgstr "מספר רצועה" + msgctxt "#31311" msgid "Fanart image[CR][CR]Unavailable[CR][CR] Click button to set" msgstr "תמונת פאנארט[CR][CR]לא זמינה[CR][CR]יש ללחוץ לבחירה בתמונה" +msgctxt "#31312" +msgid "Current scraper" +msgstr "סקרייפר נוכחי" + +msgctxt "#31313" +msgid "Choose a scraper" +msgstr "בחירת סקרייפר" + +msgctxt "#31314" +msgid "Content scanning options" +msgstr "הגדרות סריקת תוכן" + +msgctxt "#31317" +msgid "Set fanart path" +msgstr "קביעת נתיב פאנארט" + +msgctxt "#31319" +msgid "Selected profile" +msgstr "משתמש נבחר" + +msgctxt "#31320" +msgid "Last logged in" +msgstr "חובר לאחרונה" + +msgctxt "#31321" +msgid "Karaoke song selector" +msgstr "בוחר שיר קריוקי" + msgctxt "#31322" msgid "Aired" msgstr "שודר" +msgctxt "#31325" +msgid "Playlist options" +msgstr "אפשרויות רשימת ניגון" + msgctxt "#31326" msgid "Created" msgstr "נוצר" @@ -204,10 +372,22 @@ msgctxt "#31327" msgid "Resolution" msgstr "אבחנה" +msgctxt "#31328" +msgid "Recently added" +msgstr "נוסף לאחרונה" + msgctxt "#31329" msgid "[B]Timer set![/B] [COLOR=grey2] - System auto shutdown in[/COLOR]" msgstr "[B]התזמון נקבע![/B] [COLOR=grey2] - כיבוי מערכת אוטומטי בעוד[/COLOR]" +msgctxt "#31330" +msgid "Click button to play[CR][CR]movie trailer" +msgstr "יש ללחוץ הכפתור ע\"מ לנגן[CR][CR]את הקדימון" + +msgctxt "#31331" +msgid "Album details" +msgstr "פרטי אלבום" + msgctxt "#31351" msgid "Pause" msgstr "השהיה" @@ -216,6 +396,10 @@ msgctxt "#31352" msgid "Stop" msgstr "עצירה" +msgctxt "#31353" +msgid "Fast forward" +msgstr "הרצה קדימה" + msgctxt "#31354" msgid "Rewind" msgstr "הרצה אחורה" @@ -224,9 +408,13 @@ msgctxt "#31355" msgid "Movie menu" msgstr "תפריט סרט" +msgctxt "#31356" +msgid "Download subtitles" +msgstr "הורדת כתוביות" + msgctxt "#31360" msgid "Watch as 2D" -msgstr "צפיה כ־2D" +msgstr "צפייה כ־2D" msgctxt "#31361" msgid "Change mode" @@ -240,6 +428,10 @@ msgctxt "#31390" msgid "Skin default" msgstr "ברירת מחדל של המעטפת" +msgctxt "#31391" +msgid "Skin default with no caps" +msgstr "ברירת מחדל של המעטפת ללא רישיות" + msgctxt "#31392" msgid "Arial based" msgstr "מבוסס Arial" @@ -256,10 +448,22 @@ msgctxt "#31402" msgid "[B]CONFIGURE MUSIC SETTINGS[/B][CR][CR]Manage your music library · Set music playback options · Change music listing options[CR]Setup song submission · Set karaoke options" msgstr "[B]שינוי הגדרות מוזיקה[/B][CR][CR]ניהול ספריית המוזיקה · קביעת העדפות ניגון מוזיקה · שינוי אפשרויות תצוגת קבצי מוזיקה[CR]הגדרת אפשרויות קריוקי" +msgctxt "#31403" +msgid "[B]CONFIGURE PICTURE SETTINGS[/B][CR][CR]Set picture listing options · Configure slideshow" +msgstr "[B]שינוי הגדרות תמונות[/B][CR][CR]הגדרת אפשרויות תצוגת קבצי תמונה · הגדרת אפשרויות מצגת תמונה" + +msgctxt "#31404" +msgid "[B]CONFIGURE WEATHER SETTINGS[/B][CR][CR]Set various cities to collect weather information" +msgstr "[B]שינוי הגדרות מזג אוויר[/B][CR][CR]בחירת עד שלוש ערים עבורן תוצג תחזית מזג אוויר" + msgctxt "#31406" msgid "[B]CONFIGURE SYSTEM SETTINGS[/B][CR][CR]Setup and calibrate displays · Configure audio output · Setup remote controls[CR]Set power saving options · Enable debugging · Setup master lock" msgstr "[B]שינוי הגדרות מערכת[/B][CR][CR]הגדרת וכיול התקני תצוגה · הגדרת התקן פלט שמע · הגדרת שלט רחוק[CR]קביעת העדפות חיסכון בחשמל · הפעלת יומן רישום מורחב · הגדרת קוד נעילה ראשי" +msgctxt "#31408" +msgid "[B]CONFIGURE ADD-ONS[/B][CR][CR]Manage your installed add-ons · Browse for and install add-ons from kodi.tv[CR]Modify add-on settings" +msgstr "[B]הגדרת הרחבות[/B][CR][CR]ניהול הרחבות מותקנות · עיון בהרחבות מ־kodi.tv והתקנתן[CR]שינוי הגדרות הרחבה" + msgctxt "#31409" msgid "[B]CONFIGURE TV SETTINGS[/B][CR][CR]Change full screen info · Manage EPG data settings" msgstr "[B]שינוי הגדרות טלוויזיה[/B][CR][CR]שינוי המידע המוצג במסך מלא · ניהול הגדרות נתוני לוח השידורים" @@ -268,6 +472,14 @@ msgctxt "#31410" msgid "[B]CONFIGURE SERVICE SETTINGS[/B][CR][CR]Setup control of Kodi via UPnP and HTTP · Configure file sharing[CR]Enable Zeroconf · Configure AirPlay" msgstr "[B]שינוי הגדרות שירותים[/B][CR][CR]הגדרות שליטה על Kodi דרך UPnP ו־HTTP · הגדרות שיתוף קבצים[CR]הפעלת Zeroconf · הגדרות AirPlay" +msgctxt "#31411" +msgid "First run help..." +msgstr "סיוע היכרות..." + +msgctxt "#31412" +msgid "This tab signifies that there is a menu off to the side of this window that contains extra options for this section. To access the menu, navigate to the left with your remote control or keyboard or place your mouse pointer over the tab. [CR][CR]Click \"OK\" to close this dialogue. It will not appear again." +msgstr "לשונית זו מציינת שיש תפריט נוסף לצד חלון זה המכיל הגדרות נוספות עבור מדור זה. לשם גישה לתפריט, יש לנווט שמאלה בעזרת השלט או המקלדת או הצבת סמן העכבר מעל הלשונית . [CR][CR] יש ללחוץ על \"אישור\" לשם סגירת דיאלוג זה. הודעה זו לא תוצג שנית." + msgctxt "#31413" msgid "Local subtitle available" msgstr "כתובית מקומית זמינה" @@ -276,6 +488,10 @@ msgctxt "#31420" msgid "Login" msgstr "כניסה" +msgctxt "#31421" +msgid "Select your Kodi user profile[CR]to login and continue" +msgstr "יש לבחור חשבון משתמש Kodi[CR]להתחברות והמשך" + msgctxt "#31422" msgid "Show or hide the login screen at startup." msgstr "הצג או הסתר מסך כניסה בעת ההפעלה." @@ -284,18 +500,66 @@ msgctxt "#31423" msgid "Select the profile that will be used at startup when the login screen is disabled." msgstr "יש לבחור משתמש שיחובר כברירת מחדל בעת ההפעלה כאשר מסך כניסה מנוטרל." +msgctxt "#31501" +msgid "Scheduled time" +msgstr "זמן מתוכנן" + msgctxt "#31502" msgid "TV" msgstr "טלוויזיה" +msgctxt "#31503" +msgid "Add group" +msgstr "הוספת קבוצה" + +msgctxt "#31504" +msgid "Rename group" +msgstr "שינוי שם קבוצה" + +msgctxt "#31505" +msgid "Delete group" +msgstr "מחיקת קבוצה" + msgctxt "#31506" msgid "Available[CR]Groups" msgstr "קבוצות[CR]זמינות" +msgctxt "#31509" +msgid "Channel group" +msgstr "קבוצת ערוצים" + +msgctxt "#31510" +msgid "Timer set" +msgstr "תזמון נקבע" + +msgctxt "#31511" +msgid "Channel options" +msgstr "אפשרויות ערוץ" + +msgctxt "#31901" +msgid "36-hour forecast" +msgstr "תחזית ל־36 שעות" + +msgctxt "#31902" +msgid "Hourly forecast" +msgstr "תחזית לפי שעה" + +msgctxt "#31903" +msgid "Weekend forecast" +msgstr "תחזית לסופ\"ש" + +msgctxt "#31904" +msgid "Daily forecast" +msgstr "תחזית יומית" + msgctxt "#31905" msgid "Forecast" msgstr "תחזית" +msgctxt "#31908" +msgid "Chance of precipitation" +msgstr "סיכוי למשקעים" + msgctxt "#31909" msgid "Fetching forecast info..." msgstr "משיג פרטי תחזית..." diff --git a/addons/skin.confluence/language/resource.language.hr_hr/strings.po b/addons/skin.confluence/language/resource.language.hr_hr/strings.po index ebd50b5582..df5994a8e0 100644 --- a/addons/skin.confluence/language/resource.language.hr_hr/strings.po +++ b/addons/skin.confluence/language/resource.language.hr_hr/strings.po @@ -16,10 +16,22 @@ msgstr "" "Language: hr_HR\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +msgctxt "#31000" +msgid "Change your" +msgstr "Promijenite vaše" + +msgctxt "#31003" +msgid "Power options" +msgstr "Mogućnosti energije" + msgctxt "#31004" msgid "Working..." msgstr "Reprodukcija..." +msgctxt "#31005" +msgid "Hide information" +msgstr "Sakrij informacije" + msgctxt "#31006" msgid "View options" msgstr "Mogućnosti prikaza" @@ -28,6 +40,10 @@ msgctxt "#31008" msgid "Full screen" msgstr "Cijeli zaslon" +msgctxt "#31009" +msgid "Total duration" +msgstr "Ukupno trajanje" + msgctxt "#31022" msgid "Music - Files" msgstr "Glazba - Datoteke" @@ -44,14 +60,30 @@ msgctxt "#31025" msgid "Items" msgstr "Stavaka" +msgctxt "#31026" +msgid "Misc options" +msgstr "Ostale mogućnosti" + msgctxt "#31027" msgid "Location" msgstr "Lokacija" +msgctxt "#31028" +msgid "Poster wrap" +msgstr "Omot postera" + msgctxt "#31029" msgid "Fanart" msgstr "Slika omota" +msgctxt "#31031" +msgid "Pic thumbs" +msgstr "Minijature" + +msgctxt "#31032" +msgid "Image wrap" +msgstr "Slika omota" + msgctxt "#31033" msgid "Info" msgstr "Informacije" @@ -60,6 +92,10 @@ msgctxt "#31039" msgid "Actions" msgstr "Radnje" +msgctxt "#31040" +msgid "Now playing" +msgstr "Trenutno se reproducira" + msgctxt "#31042" msgid "PLAYING" msgstr "REPRODUKCIJA" @@ -80,6 +116,10 @@ msgctxt "#31046" msgid "SEEKING" msgstr "PREMOTAVANJE" +msgctxt "#31048" +msgid "Visualisation presets" +msgstr "Predlošci vizualizacije" + msgctxt "#31049" msgid "End time" msgstr "Vrijeme završetka" @@ -116,6 +156,10 @@ msgctxt "#31060" msgid "This file is stacked, select the part you want to play from." msgstr "Ova datoteka je složena, odaberite dio od kojeg želite pokrenuti reprodukciju." +msgctxt "#31061" +msgid "Current selected" +msgstr "Trenutno odabrano" + msgctxt "#31101" msgid "Home screen options" msgstr "Mogućnosti početnog zaslona" @@ -124,10 +168,26 @@ msgctxt "#31102" msgid "Background" msgstr "Pozadina" +msgctxt "#31103" +msgid "Show \"Paused\" in picture slideshow" +msgstr "Prikaži \"Pauzirano\" u slikovnoj prezentaciji" + +msgctxt "#31104" +msgid "Play trailers in a window [COLOR=grey3](Video information dialogue only)[/COLOR]" +msgstr "Reproduciraj najave u prozoru [COLOR=grey3](Samo dijalog video informacija)[/COLOR]" + msgctxt "#31106" msgid "Miscellaneous options" msgstr "Ostale mogućnosti" +msgctxt "#31107" +msgid "Hide flagging read from video filenames [COLOR=grey3](e.g. Blu-ray, HD-DVD)[/COLOR]" +msgstr "Sakrij oznake pročitane iz naziva video datoteka [COLOR=grey3](npr. Blu-ray, HD-DVD)[/COLOR]" + +msgctxt "#31108" +msgid "Hide main menu buttons" +msgstr "Sakrij tipke glavnog izbornika" + msgctxt "#31109" msgid "Enable custom background" msgstr "Omogući prilagođenu pozadinu" @@ -144,6 +204,30 @@ msgctxt "#31112" msgid "Options" msgstr "Mogućnosti" +msgctxt "#31116" +msgid "Show recently added albums" +msgstr "Prikaži nedavno dodane albume" + +msgctxt "#31117" +msgid "Show recently added videos" +msgstr "Prikaži nedavno dodane video snimke" + +msgctxt "#31118" +msgid "Home page programs submenu" +msgstr "Početna stranica podizbornika programa " + +msgctxt "#31119" +msgid "Hide background fanart" +msgstr "Sakrij pozadinu slike omota" + +msgctxt "#31124" +msgid "Show background \"Now playing\" video" +msgstr "Prikaži pozadinu \"Trenutno se reproducira\" videa" + +msgctxt "#31125" +msgid "Show background \"Now playing\" visualisation" +msgstr "Prikaži pozadinu \"Trenutno se reproducira\" vizualizacije" + msgctxt "#31126" msgid "Play TV theme songs in video library (TvTunes add-on)" msgstr "Reproduciraj pjesme TV tema iz videoteke (TvTunes dodatak)" @@ -156,6 +240,26 @@ msgctxt "#31128" msgid "Lyrics" msgstr "Tekstovi pjesama" +msgctxt "#31129" +msgid "Hide fanart in full screen visualisation" +msgstr "Sakrij sliku omota u vizualizaciji cijelog zaslona" + +msgctxt "#31132" +msgid "Lyrics add-on" +msgstr "Dodatak za tekstove pjesama" + +msgctxt "#31134" +msgid "Home page \"Videos\" submenu" +msgstr "Početna stranica \"video\" podizbornika" + +msgctxt "#31135" +msgid "Home page \"Music\" submenu" +msgstr "Početna stranica \"glazbenog\" podizbornika" + +msgctxt "#31136" +msgid "Home page \"Pictures\" submenu" +msgstr "Početna stranica podizbornika \"slika\"" + msgctxt "#31140" msgid "Music OSD" msgstr "OSD glazbe" @@ -172,22 +276,94 @@ msgctxt "#31200" msgid "Shortcuts" msgstr "Prečaci" +msgctxt "#31203" +msgid "Choose your song" +msgstr "Odaberite svoju pjesmu" + +msgctxt "#31205" +msgid "Lyrics source" +msgstr "Izvor tekstova pjesama" + msgctxt "#31206" msgid "Found" msgstr "Pronađeno" +msgctxt "#31207" +msgid "Find more items" +msgstr "Potraži više stavki" + +msgctxt "#31208" +msgid "Upcoming episodes" +msgstr "Nadolazeće epizode" + +msgctxt "#31300" +msgid "Current temperature" +msgstr "Trenutna temperatura" + +msgctxt "#31301" +msgid "Last updated" +msgstr "Posljednje ažurirano" + msgctxt "#31303" msgid "Data provider" msgstr "Pružatelj podataka" +msgctxt "#31307" +msgid "Hide fanart" +msgstr "Sakrij sliku omota" + +msgctxt "#31308" +msgid "Movie details" +msgstr "Pojedinosti filma" + +msgctxt "#31309" +msgid "Memory used:" +msgstr "Korištenje memorije:" + +msgctxt "#31310" +msgid "Track number" +msgstr "Broj pjesme" + msgctxt "#31311" msgid "Fanart image[CR][CR]Unavailable[CR][CR] Click button to set" msgstr "Slika za omot[CR][CR]je nedostupna[CR][CR] Kliknite tipku za postavljanje" +msgctxt "#31312" +msgid "Current scraper" +msgstr "Trenutni sakupljač" + +msgctxt "#31313" +msgid "Choose a scraper" +msgstr "Odaberite sakupljača" + +msgctxt "#31314" +msgid "Content scanning options" +msgstr "Mogućnosti pretraživanja sadržaja" + +msgctxt "#31317" +msgid "Set fanart path" +msgstr "Postavite putanju slike omota" + +msgctxt "#31319" +msgid "Selected profile" +msgstr "Odabrani profil" + +msgctxt "#31320" +msgid "Last logged in" +msgstr "Posljednji prijavljen" + +msgctxt "#31321" +msgid "Karaoke song selector" +msgstr "Izbornik karaoke pjesama" + msgctxt "#31322" msgid "Aired" msgstr "Emitirano" +msgctxt "#31325" +msgid "Playlist options" +msgstr "Mogućnosti popisa izvođenja" + msgctxt "#31326" msgid "Created" msgstr "Napravljeno" @@ -204,6 +380,14 @@ msgctxt "#31329" msgid "[B]Timer set![/B] [COLOR=grey2] - System auto shutdown in[/COLOR]" msgstr "[B]Vrijeme isključivanja![/B][COLOR=grey2] - Sustav se automatski isključuje za[/COLOR]" +msgctxt "#31330" +msgid "Click button to play[CR][CR]movie trailer" +msgstr "Kliknite tipku za reprodukciju[CR][CR]filmskih najava" + +msgctxt "#31331" +msgid "Album details" +msgstr "Pojedinosti albuma" + msgctxt "#31351" msgid "Pause" msgstr "Pauza" @@ -212,6 +396,10 @@ msgctxt "#31352" msgid "Stop" msgstr "Zaustavi" +msgctxt "#31353" +msgid "Fast forward" +msgstr "Premotavanje unaprijed" + msgctxt "#31354" msgid "Rewind" msgstr "Premotavanje unazad" @@ -220,6 +408,10 @@ msgctxt "#31355" msgid "Movie menu" msgstr "Filmski izbornik" +msgctxt "#31356" +msgid "Download subtitles" +msgstr "Preuzmanje podnaslova" + msgctxt "#31360" msgid "Watch as 2D" msgstr "Gledaj kao 2D" @@ -236,6 +428,10 @@ msgctxt "#31390" msgid "Skin default" msgstr "Uobičajena presvlaka" +msgctxt "#31391" +msgid "Skin default with no caps" +msgstr "Uobičajena presvlaka bez velikih slova" + msgctxt "#31392" msgid "Arial based" msgstr "Temeljen na Arialu " @@ -252,10 +448,22 @@ msgctxt "#31402" msgid "[B]CONFIGURE MUSIC SETTINGS[/B][CR][CR]Manage your music library · Set music playback options · Change music listing options[CR]Setup song submission · Set karaoke options" msgstr "[B]PRILAGODITE POSTAVKE GLAZBE[/B][CR][CR]Upravljajte svojm fonotekom · Postavite mogućnosti reprodukcije glazbe[CR]Promjenite mogućnosti popisivanja glazbenoga sadržaja · Postavite slanje pjesama · Postavite mogućnosti karaoka" +msgctxt "#31403" +msgid "[B]CONFIGURE PICTURE SETTINGS[/B][CR][CR]Set picture listing options · Configure slideshow" +msgstr "[B]PRILAGODITE POSTAVKE SLIKA[/B][CR][CR]Postavljanje mogućnosti popsivanja slika · Postavke slikovne prezentacije" + +msgctxt "#31404" +msgid "[B]CONFIGURE WEATHER SETTINGS[/B][CR][CR]Set various cities to collect weather information" +msgstr "[B]PRILAGODITE POSTAVKE VREMENSKE PROGNOZE[/B][CR][CR]Postavite različite gradove za prikupljanje informacija vremenske prognoze" + msgctxt "#31406" msgid "[B]CONFIGURE SYSTEM SETTINGS[/B][CR][CR]Setup and calibrate displays · Configure audio output · Setup remote controls[CR]Set power saving options · Enable debugging · Setup master lock" msgstr "[B]PRILAGODITE POSTAVKE SUSTAVA[/B][CR][CR]Prilagodite i kalibrirajte zaslon · Prilagodite izlaz zvuka · Postavite daljinsko upravljanje[CR]Postavite mogućnosti uštede energije · Omogućite zapise otklanjanja grešaka · Postavite glavno zaključavanje" +msgctxt "#31408" +msgid "[B]CONFIGURE ADD-ONS[/B][CR][CR]Manage your installed add-ons · Browse for and install add-ons from kodi.tv[CR]Modify add-on settings" +msgstr "[B]PRILAGODITE DODATKE[/B][CR][CR]Upravljajte svojim instaliranim dodacima · Pregledavajte i instalirajte dodatake iz kodi.tv[CR]Mijenjajte postavke dodataka" + msgctxt "#31409" msgid "[B]CONFIGURE TV SETTINGS[/B][CR][CR]Change full screen info · Manage EPG data settings" msgstr "[B]PRILAGODITE TV POSTAVKE[/B][CR][CR]Promjenite informacije cijelog zaslona · Upravljajte postavkama podataka elektronskog programskog vodiča (EPG)" @@ -264,6 +472,14 @@ msgctxt "#31410" msgid "[B]CONFIGURE SERVICE SETTINGS[/B][CR][CR]Setup control of Kodi via UPnP and HTTP · Configure file sharing[CR]Enable Zeroconf · Configure AirPlay" msgstr "[B]PRILAGODITE POSTAVKE USLUGA[/B][CR][CR]Postavite upravljanje Kodijem putem UPnP-a i HTTP-a · Prilagodite dijeljenje datoteka[CR]Omogućite Zeroconf · Prilagodite AirPlay" +msgctxt "#31411" +msgid "First run help..." +msgstr "Pomoć kod prvog pokretanja..." + +msgctxt "#31412" +msgid "This tab signifies that there is a menu off to the side of this window that contains extra options for this section. To access the menu, navigate to the left with your remote control or keyboard or place your mouse pointer over the tab. [CR][CR]Click \"OK\" to close this dialogue. It will not appear again." +msgstr "Ova kartica označava da postoji izbornik sa strane ovog prozora koji sadrži dodatne mogućnosti ovog odjeljka. Za pristup izborniku, idite lijevo daljinskim upravljačem ili tipkovnicom ili postavite pokazivač miša iznad kartice. [CR] [CR] Kliknite na \"U redu\" za zatvaranje ovog dijaloga. Neće se ponovno pojaviti." + msgctxt "#31413" msgid "Local subtitle available" msgstr "Lokalni podnaslovi dostupni" @@ -272,6 +488,10 @@ msgctxt "#31420" msgid "Login" msgstr "Prijava" +msgctxt "#31421" +msgid "Select your Kodi user profile[CR]to login and continue" +msgstr "Odaberite svoj Kodi korisnički profil[CR]za prijavu i nastavak" + msgctxt "#31422" msgid "Show or hide the login screen at startup." msgstr "Prikaži ili sakrij zaslon prijave pri pokretanju." @@ -280,18 +500,66 @@ msgctxt "#31423" msgid "Select the profile that will be used at startup when the login screen is disabled." msgstr "Odaberite profil koji će se koristiti pri pokretanju kada je zaslon prijave onemogućen." +msgctxt "#31501" +msgid "Scheduled time" +msgstr "Planirano vrijeme" + msgctxt "#31502" msgid "TV" -msgstr "TELEVIZIJA" +msgstr "Televizija" + +msgctxt "#31503" +msgid "Add group" +msgstr "Dodaj grupu" + +msgctxt "#31504" +msgid "Rename group" +msgstr "Preimenuj grupu" + +msgctxt "#31505" +msgid "Delete group" +msgstr "Obriši grupu" msgctxt "#31506" msgid "Available[CR]Groups" msgstr "Dostupne[CR]grupe" +msgctxt "#31509" +msgid "Channel group" +msgstr "Grupa programa" + +msgctxt "#31510" +msgid "Timer set" +msgstr "Postavljanje zakazanog snimanja" + +msgctxt "#31511" +msgid "Channel options" +msgstr "Mogućnosti programa" + +msgctxt "#31901" +msgid "36-hour forecast" +msgstr "36-satna prognoza" + +msgctxt "#31902" +msgid "Hourly forecast" +msgstr "Prognoza za svaki sat" + +msgctxt "#31903" +msgid "Weekend forecast" +msgstr "Prognoza za vikend" + +msgctxt "#31904" +msgid "Daily forecast" +msgstr "Dnevna prognoza" + msgctxt "#31905" msgid "Forecast" msgstr "Prognoza" +msgctxt "#31908" +msgid "Chance of precipitation" +msgstr "Moguće padaline" + msgctxt "#31909" msgid "Fetching forecast info..." msgstr "Nabavljanje informacija prognoze..." diff --git a/addons/skin.confluence/language/resource.language.hu_hu/strings.po b/addons/skin.confluence/language/resource.language.hu_hu/strings.po index e9ddefdb87..f9f76f2f52 100644 --- a/addons/skin.confluence/language/resource.language.hu_hu/strings.po +++ b/addons/skin.confluence/language/resource.language.hu_hu/strings.po @@ -162,7 +162,7 @@ msgstr "Jelenleg kiválasztott" msgctxt "#31101" msgid "Home screen options" -msgstr "Sajátképernyő lehetőségei" +msgstr "Főképernyő lehetőségei" msgctxt "#31102" msgid "Background" diff --git a/addons/skin.confluence/language/resource.language.mn_mn/strings.po b/addons/skin.confluence/language/resource.language.mn_mn/strings.po index 4dd5622b8e..2123814e42 100644 --- a/addons/skin.confluence/language/resource.language.mn_mn/strings.po +++ b/addons/skin.confluence/language/resource.language.mn_mn/strings.po @@ -20,22 +20,106 @@ msgctxt "#31008" msgid "Full screen" msgstr "Бүтэн дэлгэц" +msgctxt "#31022" +msgid "Music - Files" +msgstr "Дууны Файлууд" + +msgctxt "#31023" +msgid "Playing" +msgstr "Тоглуулж байна" + +msgctxt "#31024" +msgid "Page" +msgstr "Хуудас" + +msgctxt "#31026" +msgid "Misc options" +msgstr "бусад тохиргоонууд" + msgctxt "#31027" msgid "Location" msgstr "Байрлал" +msgctxt "#31033" +msgid "Info" +msgstr "мэдээлэл" + +msgctxt "#31040" +msgid "Now playing" +msgstr "Одоо тоглуулж байгаа" + +msgctxt "#31042" +msgid "PLAYING" +msgstr "ТОГЛУУЛЖ БАЙНА" + +msgctxt "#31043" +msgid "PAUSED" +msgstr "ТҮР ЗОГСООСОН" + +msgctxt "#31044" +msgid "FAST FORWARD" +msgstr "УРАГШ ГҮЙЛГЭХ" + +msgctxt "#31045" +msgid "REWIND" +msgstr "БУЦААХ" + +msgctxt "#31046" +msgid "SEEKING" +msgstr "ХАЙХ" + msgctxt "#31049" msgid "End time" msgstr "Дуусах цаг" +msgctxt "#31050" +msgid "Sort: Ascending" +msgstr "Өсөхөөр эрэмбэлэх" + +msgctxt "#31051" +msgid "Sort: Descending" +msgstr "Уруудахаар эрэмбэлэх" + msgctxt "#31102" msgid "Background" msgstr "Арын хэсэг" +msgctxt "#31111" +msgid "Hide" +msgstr "Нуух" + +msgctxt "#31112" +msgid "Options" +msgstr "Тохиргоонууд" + +msgctxt "#31116" +msgid "Show recently added albums" +msgstr "Саяхан нэмэгдсэн хуурцаг" + +msgctxt "#31117" +msgid "Show recently added videos" +msgstr "Саяхан нэмэгдсэн видеонууд" + +msgctxt "#31128" +msgid "Lyrics" +msgstr "Дууны үгс" + msgctxt "#31200" msgid "Shortcuts" msgstr "Дөт зам" +msgctxt "#31205" +msgid "Lyrics source" +msgstr "Дууны үгсийн эх үүсвэр" + +msgctxt "#31206" +msgid "Found" +msgstr "Оллоо" + +msgctxt "#31308" +msgid "Movie details" +msgstr "Киноны мэдээлэл" + msgctxt "#31327" msgid "Resolution" msgstr "Нягтаршил" diff --git a/addons/skin.confluence/language/resource.language.nb_no/strings.po b/addons/skin.confluence/language/resource.language.nb_no/strings.po index 82ce094dbf..cf8b4a891c 100644 --- a/addons/skin.confluence/language/resource.language.nb_no/strings.po +++ b/addons/skin.confluence/language/resource.language.nb_no/strings.po @@ -108,6 +108,10 @@ msgctxt "#31046" msgid "SEEKING" msgstr "SØKER" +msgctxt "#31048" +msgid "Visualisation presets" +msgstr "Visualiseringsforvalg" + msgctxt "#31049" msgid "End time" msgstr "Ferdig klokken" @@ -144,6 +148,10 @@ msgctxt "#31060" msgid "This file is stacked, select the part you want to play from." msgstr "Denne filen er stablet, velg den delen du vil spille fra." +msgctxt "#31061" +msgid "Current selected" +msgstr "Nåværende valgt" + msgctxt "#31101" msgid "Home screen options" msgstr "Alternativer for hovedvindu" @@ -152,10 +160,26 @@ msgctxt "#31102" msgid "Background" msgstr "Bakgrunn" +msgctxt "#31103" +msgid "Show \"Paused\" in picture slideshow" +msgstr "Vis «Pause» under lysbildefremvisning" + +msgctxt "#31104" +msgid "Play trailers in a window [COLOR=grey3](Video information dialogue only)[/COLOR]" +msgstr "Spill trailere i et vindu[COLOR=grey3](Kun videoinformasjonsdialog)[/COLOR]" + msgctxt "#31106" msgid "Miscellaneous options" msgstr "Øvrige alternativer" +msgctxt "#31107" +msgid "Hide flagging read from video filenames [COLOR=grey3](e.g. Blu-ray, HD-DVD)[/COLOR]" +msgstr "Gjem «sett»-flagg fra videofilnavn [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]" + +msgctxt "#31108" +msgid "Hide main menu buttons" +msgstr "Skjul hovedmenyknapper" + msgctxt "#31109" msgid "Enable custom background" msgstr "Aktiver egendefinert bakgrunn" @@ -172,6 +196,30 @@ msgctxt "#31112" msgid "Options" msgstr "Alternativer" +msgctxt "#31116" +msgid "Show recently added albums" +msgstr "Vis nylig tilføyde albumer" + +msgctxt "#31117" +msgid "Show recently added videos" +msgstr "Vis nylig tilføyde videoer" + +msgctxt "#31118" +msgid "Home page programs submenu" +msgstr "Programundermeny i hovedmeny" + +msgctxt "#31119" +msgid "Hide background fanart" +msgstr "Skjul fanart-bakgrunn" + +msgctxt "#31124" +msgid "Show background \"Now playing\" video" +msgstr "Vis videoer i bakgrunnen" + +msgctxt "#31125" +msgid "Show background \"Now playing\" visualisation" +msgstr "Vis «spilles nå» bakgrunnen i visualisering" + msgctxt "#31126" msgid "Play TV theme songs in video library (TvTunes add-on)" msgstr "Spill av kjenningsmelodier i videobiblioteket (TvTunes-utvidelse)" @@ -184,6 +232,26 @@ msgctxt "#31128" msgid "Lyrics" msgstr "Sangtekster" +msgctxt "#31129" +msgid "Hide fanart in full screen visualisation" +msgstr "Gjem Fanart i fullskjermsvisualisering" + +msgctxt "#31132" +msgid "Lyrics add-on" +msgstr "Sangtekst-utvidelse" + +msgctxt "#31134" +msgid "Home page \"Videos\" submenu" +msgstr "Hjemmeskjerm video-undermeny" + +msgctxt "#31135" +msgid "Home page \"Music\" submenu" +msgstr "Hjemmeskjerm musikk-undermeny" + +msgctxt "#31136" +msgid "Home page \"Pictures\" submenu" +msgstr "Hjemmeskjerm bilder-undermeny" + msgctxt "#31140" msgid "Music OSD" msgstr "Musikk OSD" @@ -200,22 +268,94 @@ msgctxt "#31200" msgid "Shortcuts" msgstr "Snarveier" +msgctxt "#31203" +msgid "Choose your song" +msgstr "Velg din låt" + +msgctxt "#31205" +msgid "Lyrics source" +msgstr "Sangtekstskilde" + msgctxt "#31206" msgid "Found" msgstr "Funnet" +msgctxt "#31207" +msgid "Find more items" +msgstr "Finn flere elementer" + +msgctxt "#31208" +msgid "Upcoming episodes" +msgstr "Kommende episoder" + +msgctxt "#31300" +msgid "Current temperature" +msgstr "Været nå" + +msgctxt "#31301" +msgid "Last updated" +msgstr "Sist oppdatert" + msgctxt "#31303" msgid "Data provider" msgstr "Datatilbyder" +msgctxt "#31307" +msgid "Hide fanart" +msgstr "Skjul fanart" + +msgctxt "#31308" +msgid "Movie details" +msgstr "Filmdetaljer" + +msgctxt "#31309" +msgid "Memory used:" +msgstr "Benyttet minne:" + +msgctxt "#31310" +msgid "Track number" +msgstr "Spornummer" + msgctxt "#31311" msgid "Fanart image[CR][CR]Unavailable[CR][CR] Click button to set" msgstr "Fanart-bilde[CR][CR]ikke tilgjengelig[CR][CR]Klikk på knappen for å oppgi" +msgctxt "#31312" +msgid "Current scraper" +msgstr "Nåværende skraper" + +msgctxt "#31313" +msgid "Choose a scraper" +msgstr "Velg en skraper" + +msgctxt "#31314" +msgid "Content scanning options" +msgstr "Alternativer for innholdsskraper" + +msgctxt "#31317" +msgid "Set fanart path" +msgstr "Oppgi søkesti for fanart" + +msgctxt "#31319" +msgid "Selected profile" +msgstr "Valgt profil" + +msgctxt "#31320" +msgid "Last logged in" +msgstr "Sist innlogget" + +msgctxt "#31321" +msgid "Karaoke song selector" +msgstr "Låtvelger for karaoke" + msgctxt "#31322" msgid "Aired" msgstr "Sendt" +msgctxt "#31325" +msgid "Playlist options" +msgstr "Alternativer for spilleliste" + msgctxt "#31326" msgid "Created" msgstr "Laget" @@ -232,6 +372,14 @@ msgctxt "#31329" msgid "[B]Timer set![/B] [COLOR=grey2] - System auto shutdown in[/COLOR]" msgstr "[B]Tidsur fastsatt![/B] [COLOR=grey2] - Systemet avsluttes automatisk om[/COLOR]" +msgctxt "#31330" +msgid "Click button to play[CR][CR]movie trailer" +msgstr "Klikk for å spille[CR][CR]filmtrailer" + +msgctxt "#31331" +msgid "Album details" +msgstr "Albumdetaljer" + msgctxt "#31351" msgid "Pause" msgstr "Pause" @@ -240,6 +388,10 @@ msgctxt "#31352" msgid "Stop" msgstr "Stopp" +msgctxt "#31353" +msgid "Fast forward" +msgstr "Spol framover" + msgctxt "#31354" msgid "Rewind" msgstr "Spol bakover" @@ -248,6 +400,10 @@ msgctxt "#31355" msgid "Movie menu" msgstr "Filmmeny" +msgctxt "#31356" +msgid "Download subtitles" +msgstr "Hent undertekster" + msgctxt "#31360" msgid "Watch as 2D" msgstr "Se som 2D" @@ -264,6 +420,10 @@ msgctxt "#31390" msgid "Skin default" msgstr "Standard for skall" +msgctxt "#31391" +msgid "Skin default with no caps" +msgstr "Skallstandard uten store bokstaver" + msgctxt "#31392" msgid "Arial based" msgstr "Arial-basert" @@ -292,6 +452,10 @@ msgctxt "#31410" msgid "[B]CONFIGURE SERVICE SETTINGS[/B][CR][CR]Setup control of Kodi via UPnP and HTTP · Configure file sharing[CR]Enable Zeroconf · Configure AirPlay" msgstr "[B]ENDRE DINE TJENESTEINNSTILLINGER[/B][CR][CR]Konfigurer kontroll av Kodi via UPnP og HTTP · Konfigurer fildeling[CR]Aktiver Zeroconf · Konfigurer AirPlay" +msgctxt "#31411" +msgid "First run help..." +msgstr "Førstegangsintroduksjon..." + msgctxt "#31413" msgid "Local subtitle available" msgstr "Lokal tekst tilgjengelig" @@ -300,6 +464,10 @@ msgctxt "#31420" msgid "Login" msgstr "Logg inn" +msgctxt "#31421" +msgid "Select your Kodi user profile[CR]to login and continue" +msgstr "Velg din Kodi brukerprofil[CR]for å logge inn og fortsette" + msgctxt "#31422" msgid "Show or hide the login screen at startup." msgstr "Vis eller skjul innloggingsskjermen ved oppstart" @@ -308,18 +476,66 @@ msgctxt "#31423" msgid "Select the profile that will be used at startup when the login screen is disabled." msgstr "Velg profil som vil bli brukt ved oppstart når innloggingsskjermen er deaktivert ." +msgctxt "#31501" +msgid "Scheduled time" +msgstr "Planlagt tid" + msgctxt "#31502" msgid "TV" msgstr "TV" +msgctxt "#31503" +msgid "Add group" +msgstr "Legg til gruppe" + +msgctxt "#31504" +msgid "Rename group" +msgstr "Gi nytt navn til gruppe" + +msgctxt "#31505" +msgid "Delete group" +msgstr "Slett gruppe" + msgctxt "#31506" msgid "Available[CR]Groups" msgstr "Ledige[CR]grupper" +msgctxt "#31509" +msgid "Channel group" +msgstr "Kanalgruppe" + +msgctxt "#31510" +msgid "Timer set" +msgstr "Tidsur fastsatt" + +msgctxt "#31511" +msgid "Channel options" +msgstr "Kanal instillinger" + +msgctxt "#31901" +msgid "36-hour forecast" +msgstr "36-timersvarsel" + +msgctxt "#31902" +msgid "Hourly forecast" +msgstr "Time for time" + +msgctxt "#31903" +msgid "Weekend forecast" +msgstr "Helgevarsel" + +msgctxt "#31904" +msgid "Daily forecast" +msgstr "Langtidsvarsel" + msgctxt "#31905" msgid "Forecast" msgstr "Værvarsel" +msgctxt "#31908" +msgid "Chance of precipitation" +msgstr "Mulighet for nedbør" + msgctxt "#31909" msgid "Fetching forecast info..." msgstr "Henter værvarsel..." diff --git a/addons/skin.confluence/language/resource.language.pl_pl/strings.po b/addons/skin.confluence/language/resource.language.pl_pl/strings.po index 6f680badf3..2f984c539f 100644 --- a/addons/skin.confluence/language/resource.language.pl_pl/strings.po +++ b/addons/skin.confluence/language/resource.language.pl_pl/strings.po @@ -118,7 +118,7 @@ msgstr "PRZEWIJANIE" msgctxt "#31048" msgid "Visualisation presets" -msgstr "Szablony wizualizacji" +msgstr "Wzorce wizualizacji" msgctxt "#31049" msgid "End time" @@ -194,7 +194,7 @@ msgstr "Pokazuj niestandardowe tło" msgctxt "#31110" msgid "Background path:" -msgstr "Ścieżka do folderu obrazów tła:" +msgstr "Ścieżka do folderu z obrazami tła:" msgctxt "#31111" msgid "Hide" @@ -222,11 +222,11 @@ msgstr "Nie używaj fototapet w roli tła" msgctxt "#31124" msgid "Show background \"Now playing\" video" -msgstr "Wyświetlaj panel Teraz odtwarzane w tle interfejsu" +msgstr "Wyświetlaj odtwarzane wideo w tle interfejsu" msgctxt "#31125" msgid "Show background \"Now playing\" visualisation" -msgstr "Wyświetlaj wizualizację Teraz odtwarzane w tle interfejsu" +msgstr "Wyświetlaj wizualizację muzyki w tle interfejsu" msgctxt "#31126" msgid "Play TV theme songs in video library (TvTunes add-on)" @@ -342,7 +342,7 @@ msgstr "Opcje skanowania zawartości" msgctxt "#31317" msgid "Set fanart path" -msgstr "Ustaw ścieżkę do folderu tapet" +msgstr "Ustaw ścieżkę do folderu z tapetami" msgctxt "#31319" msgid "Selected profile" diff --git a/addons/skin.confluence/language/resource.language.pt_pt/strings.po b/addons/skin.confluence/language/resource.language.pt_pt/strings.po index 2573a7ccae..9bf68ce50d 100644 --- a/addons/skin.confluence/language/resource.language.pt_pt/strings.po +++ b/addons/skin.confluence/language/resource.language.pt_pt/strings.po @@ -80,6 +80,10 @@ msgctxt "#31031" msgid "Pic thumbs" msgstr "Miniaturas de imagens" +msgctxt "#31032" +msgid "Image wrap" +msgstr "Envolver a imagem" + msgctxt "#31033" msgid "Info" msgstr "Informações" @@ -148,6 +152,10 @@ msgctxt "#31060" msgid "This file is stacked, select the part you want to play from." msgstr "Este ficheiro está dividido por partes. Escolha a parte que pretende reproduzir." +msgctxt "#31061" +msgid "Current selected" +msgstr "Seleccionado actualmente" + msgctxt "#31101" msgid "Home screen options" msgstr "Opções do ecrã inicial" @@ -188,6 +196,26 @@ msgctxt "#31112" msgid "Options" msgstr "Opções" +msgctxt "#31116" +msgid "Show recently added albums" +msgstr "Mostrar álbuns adicionados recentemente" + +msgctxt "#31117" +msgid "Show recently added videos" +msgstr "Mostrar vídeos adicionados recentemente" + +msgctxt "#31118" +msgid "Home page programs submenu" +msgstr "Submenu \"Programas\" da página inicial" + +msgctxt "#31124" +msgid "Show background \"Now playing\" video" +msgstr "Mostrar vídeo \"A reproduzir\" em fundo" + +msgctxt "#31125" +msgid "Show background \"Now playing\" visualisation" +msgstr "Mostrar visualização \"A reproduzir\" em fundo" + msgctxt "#31126" msgid "Play TV theme songs in video library (TvTunes add-on)" msgstr "Tocar música de genérico na biblioteca de vídeo (Add-on TvTunes)" @@ -200,6 +228,26 @@ msgctxt "#31128" msgid "Lyrics" msgstr "Letras" +msgctxt "#31129" +msgid "Hide fanart in full screen visualisation" +msgstr "Ocultar o Fanart em ecrã completo" + +msgctxt "#31132" +msgid "Lyrics add-on" +msgstr "Add-on de letras" + +msgctxt "#31134" +msgid "Home page \"Videos\" submenu" +msgstr "Submenu \"Vídeos\" da página inicial" + +msgctxt "#31135" +msgid "Home page \"Music\" submenu" +msgstr "Submenu \"Música\" da página inicial" + +msgctxt "#31136" +msgid "Home page \"Pictures\" submenu" +msgstr "Submenu \"Imagens\" da página inicial" + msgctxt "#31140" msgid "Music OSD" msgstr "Controlos de música" @@ -216,22 +264,82 @@ msgctxt "#31200" msgid "Shortcuts" msgstr "Atalhos" +msgctxt "#31203" +msgid "Choose your song" +msgstr "Escolha a sua música" + +msgctxt "#31205" +msgid "Lyrics source" +msgstr "Fonte das letras" + msgctxt "#31206" msgid "Found" msgstr "Encontrado" +msgctxt "#31207" +msgid "Find more items" +msgstr "Encontrar mais itens" + +msgctxt "#31208" +msgid "Upcoming episodes" +msgstr "Proximos episódios" + +msgctxt "#31300" +msgid "Current temperature" +msgstr "Temperatura actual" + +msgctxt "#31301" +msgid "Last updated" +msgstr "Última actualização" + msgctxt "#31303" msgid "Data provider" msgstr "Fornecedor de dados" +msgctxt "#31307" +msgid "Hide fanart" +msgstr "Ocultar o Fanart" + +msgctxt "#31308" +msgid "Movie details" +msgstr "Detalhes do filme" + +msgctxt "#31309" +msgid "Memory used:" +msgstr "Memória utilizada:" + +msgctxt "#31310" +msgid "Track number" +msgstr "Número da faixa" + msgctxt "#31311" msgid "Fanart image[CR][CR]Unavailable[CR][CR] Click button to set" msgstr "Imagem de Fanart[CR][CR]Indisponível[CR][CR] Clique no botão para seleccionar" +msgctxt "#31314" +msgid "Content scanning options" +msgstr "Opções de pesquisa de conteúdos" + +msgctxt "#31319" +msgid "Selected profile" +msgstr "Perfil seleccionado" + +msgctxt "#31320" +msgid "Last logged in" +msgstr "Última vez ligado" + +msgctxt "#31321" +msgid "Karaoke song selector" +msgstr "Seleção de música para karaoke" + msgctxt "#31322" msgid "Aired" msgstr "Transmitido a" +msgctxt "#31325" +msgid "Playlist options" +msgstr "Opções da lista de reprodução" + msgctxt "#31326" msgid "Created" msgstr "Criado a" @@ -244,6 +352,10 @@ msgctxt "#31329" msgid "[B]Timer set![/B] [COLOR=grey2] - System auto shutdown in[/COLOR]" msgstr "[B]Temporizador activado![/B] [COLOR=grey2] - Sistema vai desligar-se em[/COLOR]" +msgctxt "#31331" +msgid "Album details" +msgstr "Detalhes do álbum" + msgctxt "#31351" msgid "Pause" msgstr "Pausar" @@ -252,6 +364,10 @@ msgctxt "#31352" msgid "Stop" msgstr "Parar" +msgctxt "#31353" +msgid "Fast forward" +msgstr "Avançar" + msgctxt "#31354" msgid "Rewind" msgstr "Retroceder" @@ -260,6 +376,10 @@ msgctxt "#31355" msgid "Movie menu" msgstr "Menu do filme" +msgctxt "#31356" +msgid "Download subtitles" +msgstr "Transferir Legendas" + msgctxt "#31360" msgid "Watch as 2D" msgstr "Ver em 2D" @@ -304,6 +424,10 @@ msgctxt "#31410" msgid "[B]CONFIGURE SERVICE SETTINGS[/B][CR][CR]Setup control of Kodi via UPnP and HTTP · Configure file sharing[CR]Enable Zeroconf · Configure AirPlay" msgstr "[B]CONFIGURAR DEFINIÇÕES DE SERVIÇOS[/B][CR][CR]Configurar controlo do Kodi via UPnP e HTTP · Configurar partilha de ficheiros[CR]Activar ZeroConf · Configurar AirPlay" +msgctxt "#31411" +msgid "First run help..." +msgstr "Ajuda da primeira execução..." + msgctxt "#31413" msgid "Local subtitle available" msgstr "Legenda local disponível" @@ -312,6 +436,10 @@ msgctxt "#31420" msgid "Login" msgstr "Iniciar sessão" +msgctxt "#31421" +msgid "Select your Kodi user profile[CR]to login and continue" +msgstr "Escolha o seu perfil de utilizador do Kodi[CR]para iniciar sessão e prosseguir" + msgctxt "#31422" msgid "Show or hide the login screen at startup." msgstr "Mostrar ou ocultar o ecrã de início de sessão ao iniciar o Kodi" @@ -324,10 +452,46 @@ msgctxt "#31502" msgid "TV" msgstr "TELEVISÃO" +msgctxt "#31503" +msgid "Add group" +msgstr "Adicionar grupo" + +msgctxt "#31504" +msgid "Rename group" +msgstr "Renomear grupo" + +msgctxt "#31505" +msgid "Delete group" +msgstr "Remover grupo" + msgctxt "#31506" msgid "Available[CR]Groups" msgstr "Grupos[CR] disponíveis" +msgctxt "#31509" +msgid "Channel group" +msgstr "Grupo de canais" + +msgctxt "#31511" +msgid "Channel options" +msgstr "Opções do canal" + +msgctxt "#31901" +msgid "36-hour forecast" +msgstr "Previsão para 36 horas" + +msgctxt "#31902" +msgid "Hourly forecast" +msgstr "Previsão horária" + +msgctxt "#31903" +msgid "Weekend forecast" +msgstr "Previsão semanal" + +msgctxt "#31904" +msgid "Daily forecast" +msgstr "Previsão diária" + msgctxt "#31905" msgid "Forecast" msgstr "Previsão" diff --git a/addons/skin.confluence/language/resource.language.sr_rs@latin/strings.po b/addons/skin.confluence/language/resource.language.sr_rs@latin/strings.po index 07ff7f3871..de3c7c2bbf 100644 --- a/addons/skin.confluence/language/resource.language.sr_rs@latin/strings.po +++ b/addons/skin.confluence/language/resource.language.sr_rs@latin/strings.po @@ -16,10 +16,22 @@ msgstr "" "Language: sr_RS@latin\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +msgctxt "#31000" +msgid "Change your" +msgstr "Promenite vaše" + +msgctxt "#31003" +msgid "Power options" +msgstr "Opcije napajanja" + msgctxt "#31004" msgid "Working..." msgstr "Obrada..." +msgctxt "#31005" +msgid "Hide information" +msgstr "Sakrij informacije" + msgctxt "#31006" msgid "View options" msgstr "Prikaži opcije" @@ -28,6 +40,10 @@ msgctxt "#31008" msgid "Full screen" msgstr "Ceo Ekran" +msgctxt "#31009" +msgid "Total duration" +msgstr "Ukupno trajanje" + msgctxt "#31022" msgid "Music - Files" msgstr "Muzika - Datoteke" @@ -44,18 +60,42 @@ msgctxt "#31025" msgid "Items" msgstr "Stavki" +msgctxt "#31026" +msgid "Misc options" +msgstr "Ostale opcije" + msgctxt "#31027" msgid "Location" msgstr "Lokacija" +msgctxt "#31028" +msgid "Poster wrap" +msgstr "Umotano u poster" + msgctxt "#31029" msgid "Fanart" -msgstr "Zan. slika" +msgstr "Umetnost ljubitelja" + +msgctxt "#31031" +msgid "Pic thumbs" +msgstr "Sličice slika" + +msgctxt "#31032" +msgid "Image wrap" +msgstr "Umotano u sliku" msgctxt "#31033" msgid "Info" msgstr "Informacije" +msgctxt "#31039" +msgid "Actions" +msgstr "Akcije" + +msgctxt "#31040" +msgid "Now playing" +msgstr "Sada pušteno" + msgctxt "#31042" msgid "PLAYING" msgstr "REPRODUKOVANjE" @@ -72,6 +112,18 @@ msgctxt "#31045" msgid "REWIND" msgstr "PREMOTAVANjE UNAZAD" +msgctxt "#31046" +msgid "SEEKING" +msgstr "TRAŽENJE" + +msgctxt "#31048" +msgid "Visualisation presets" +msgstr "Unapred zadate vizualizacije" + +msgctxt "#31049" +msgid "End time" +msgstr "Vreme kraja" + msgctxt "#31050" msgid "Sort: Ascending" msgstr "Složi: Uzlazno" @@ -82,15 +134,15 @@ msgstr "Složi: Silazno" msgctxt "#31055" msgid "Open playlist" -msgstr "Otvori rep. spisak" +msgstr "Otvori listu za reprodukciju" msgctxt "#31056" msgid "Save playlist" -msgstr "Sačuvaj rep. spisak" +msgstr "Sačuvaj listu za reprodukciju" msgctxt "#31057" msgid "Close playlist" -msgstr "Zatvori rep. spisak" +msgstr "Zatvori listu za reprodukciju" msgctxt "#31058" msgid "System music files" @@ -98,24 +150,40 @@ msgstr "Sistemske muzičke datoteke" msgctxt "#31059" msgid "Current playlist" -msgstr "Trenutni rep. spisak" +msgstr "Trenutna lista za reprodukciju" msgctxt "#31060" msgid "This file is stacked, select the part you want to play from." -msgstr "Ova datoteka je složena, izaberite deo koji želite da reprodukujete." +msgstr "Ova datoteka je složena, odaberite koji deo želite da reprodukujete iz nje." + +msgctxt "#31061" +msgid "Current selected" +msgstr "Trenutno odabrano" msgctxt "#31101" msgid "Home screen options" -msgstr "Opcije početnog ekrana" +msgstr "Opcije glavnog ekrana" msgctxt "#31102" msgid "Background" msgstr "Pozadina" +msgctxt "#31103" +msgid "Show \"Paused\" in picture slideshow" +msgstr "Prikaži \"Pauzirano\" pri reprodukciji slajdova slika" + +msgctxt "#31104" +msgid "Play trailers in a window [COLOR=grey3](Video information dialogue only)[/COLOR]" +msgstr "Pusti najave u prozoru [COLOR=grey3](Samo dijalog podataka videa)[/COLOR]" + msgctxt "#31106" msgid "Miscellaneous options" msgstr "Razne opcije" +msgctxt "#31108" +msgid "Hide main menu buttons" +msgstr "Sakrij tastere glavnog menija" + msgctxt "#31109" msgid "Enable custom background" msgstr "Omogući prilagođenu pozadinu" @@ -132,14 +200,62 @@ msgctxt "#31112" msgid "Options" msgstr "Opcije" +msgctxt "#31116" +msgid "Show recently added albums" +msgstr "Prikaži nedavno dodate albume" + +msgctxt "#31117" +msgid "Show recently added videos" +msgstr "Prikaži nedavno dodat video materijal" + +msgctxt "#31118" +msgid "Home page programs submenu" +msgstr "Podmeni \"Programi\" na glavnom ekranu" + +msgctxt "#31119" +msgid "Hide background fanart" +msgstr "Sakrij pozadinsku sliku umetnosti ljubitelja" + +msgctxt "#31124" +msgid "Show background \"Now playing\" video" +msgstr "Prikaži u pozadini \"Sada Pušteni\" video" + +msgctxt "#31125" +msgid "Show background \"Now playing\" visualisation" +msgstr "Prikaži u pozadini \"Sada Puštenu\" vizualizaciju" + +msgctxt "#31126" +msgid "Play TV theme songs in video library (TvTunes add-on)" +msgstr "Reprodukuj TV tematske pesme u video biblioteci (TVTunes dodatni program)" + msgctxt "#31127" msgid "TvTunes" -msgstr "TvMelodije" +msgstr "TvTunes" msgctxt "#31128" msgid "Lyrics" msgstr "Tekstovi pesama" +msgctxt "#31129" +msgid "Hide fanart in full screen visualisation" +msgstr "Sakrij umetnost ljubitelja pri vizualizaciji preko celog ekrana" + +msgctxt "#31132" +msgid "Lyrics add-on" +msgstr "Dodatni program za tekstove pesama" + +msgctxt "#31134" +msgid "Home page \"Videos\" submenu" +msgstr "Podmeni \"Video materijal\" na glavnom ekranu" + +msgctxt "#31135" +msgid "Home page \"Music\" submenu" +msgstr "Podmeni \"Muzika\" na glavnom ekranu" + +msgctxt "#31136" +msgid "Home page \"Pictures\" submenu" +msgstr "Podmeni \"Slike\" na glavnom ekranu" + msgctxt "#31140" msgid "Music OSD" msgstr "Muzički OSD" @@ -150,24 +266,100 @@ msgstr "Video OSD" msgctxt "#31142" msgid "Settings level" -msgstr "Nivo postavki" +msgstr "Nivo podešavanja" msgctxt "#31200" msgid "Shortcuts" msgstr "Prečice" +msgctxt "#31203" +msgid "Choose your song" +msgstr "Izaberite vašu pesmu" + +msgctxt "#31205" +msgid "Lyrics source" +msgstr "Izvor tekstova pesama" + msgctxt "#31206" msgid "Found" msgstr "Pronađeno" +msgctxt "#31207" +msgid "Find more items" +msgstr "Potraži još stavki" + +msgctxt "#31208" +msgid "Upcoming episodes" +msgstr "Predstojeće epizode" + +msgctxt "#31300" +msgid "Current temperature" +msgstr "Trenutna temperatura" + +msgctxt "#31301" +msgid "Last updated" +msgstr "Poslednji put ažurirano" + +msgctxt "#31303" +msgid "Data provider" +msgstr "Provajder podataka" + +msgctxt "#31307" +msgid "Hide fanart" +msgstr "Sakrij umetnost ljubitelja" + +msgctxt "#31308" +msgid "Movie details" +msgstr "Detalji filma" + +msgctxt "#31309" +msgid "Memory used:" +msgstr "Iskorišćenost memorije:" + +msgctxt "#31310" +msgid "Track number" +msgstr "Broj numere" + msgctxt "#31311" msgid "Fanart image[CR][CR]Unavailable[CR][CR] Click button to set" -msgstr "Zanimljiva slika[CR]nije dodeljena.[CR][CR]Kliknite na dugme da[CR]biste je dodelili." +msgstr "Umetnost ljubitelja[CR][CR]Nije dostupna.[CR][CR]Kliknite na tater da biste je postavili." + +msgctxt "#31312" +msgid "Current scraper" +msgstr "Trenutni dobavljač" + +msgctxt "#31313" +msgid "Choose a scraper" +msgstr "Izaberite dobavljača" + +msgctxt "#31314" +msgid "Content scanning options" +msgstr "Opcije analiziranja sadržaja" + +msgctxt "#31317" +msgid "Set fanart path" +msgstr "Postavite putanju umetnosti ljubitelja" + +msgctxt "#31319" +msgid "Selected profile" +msgstr "Odabrani profil" + +msgctxt "#31320" +msgid "Last logged in" +msgstr "Poslednja prijava" + +msgctxt "#31321" +msgid "Karaoke song selector" +msgstr "Birač karaoke pesme" msgctxt "#31322" msgid "Aired" msgstr "Emitovano" +msgctxt "#31325" +msgid "Playlist options" +msgstr "Opcije liste za reprodukciju" + msgctxt "#31326" msgid "Created" msgstr "Napravljeno" @@ -176,9 +368,21 @@ msgctxt "#31327" msgid "Resolution" msgstr "Rezolucija" +msgctxt "#31328" +msgid "Recently added" +msgstr "Nedavno dodato" + msgctxt "#31329" msgid "[B]Timer set![/B] [COLOR=grey2] - System auto shutdown in[/COLOR]" -msgstr "[B]Odbrojavanje je postavljeno![/B] [COLOR=grey2] - Sistem će se isključiti za[/COLOR]" +msgstr "[B]Tajmer je postavljen![/B] [COLOR=grey2] - Sistem će se isključiti za[/COLOR]" + +msgctxt "#31330" +msgid "Click button to play[CR][CR]movie trailer" +msgstr "Kliknite na taster za reprodukciju[CR][CR]najave filma" + +msgctxt "#31331" +msgid "Album details" +msgstr "Detalji albuma" msgctxt "#31351" msgid "Pause" @@ -188,6 +392,10 @@ msgctxt "#31352" msgid "Stop" msgstr "Zaustavi" +msgctxt "#31353" +msgid "Fast forward" +msgstr "Premotaj unapred" + msgctxt "#31354" msgid "Rewind" msgstr "Premotaj unazad" @@ -196,10 +404,18 @@ msgctxt "#31355" msgid "Movie menu" msgstr "Filmski meni" +msgctxt "#31356" +msgid "Download subtitles" +msgstr "Preuzmi titlove" + msgctxt "#31360" msgid "Watch as 2D" msgstr "Gledaj kao 2D" +msgctxt "#31361" +msgid "Change mode" +msgstr "Promeni režim" + msgctxt "#31362" msgid "Enabled" msgstr "Omogućeno" @@ -208,29 +424,57 @@ msgctxt "#31390" msgid "Skin default" msgstr "Podrazumevana maska" +msgctxt "#31391" +msgid "Skin default with no caps" +msgstr "Podrazumevana maska bez velikih slova" + msgctxt "#31392" msgid "Arial based" msgstr "Zasnovano na Arialu" msgctxt "#31400" msgid "[B]CONFIGURE APPEARANCE SETTINGS[/B][CR][CR]Change the skin · Set language and region · Change file listing options[CR]Set up a screensaver" -msgstr "[B]KONFIGURISANjE POSTAVKI PRIKAZA[/B][CR][CR]Promenite masku · Izaberite jezik i oblast gde živite[CR]Promenite opcije izlistavanja datoteka · Izaberite čuvara ekrana" +msgstr "[B]PODESITE PODEŠAVANJA PRIKAZA[/B][CR][CR]Promenite masku · Postavite jezik i regiju - Promenite opcije izlistavanja datoteka[CR]Postavite čuvara ekrana" msgctxt "#31401" msgid "[B]CONFIGURE VIDEO SETTINGS[/B][CR][CR]Manage your video library · Set video playback options · Change video listing options[CR]Set subtitle fonts" -msgstr "[B]KONFIGURISANjE POSTAVKI FILMOVA[/B][CR][CR]Upravljajte vašom bibliotekom filmova · Postavite opcije reprodukcije filmova[CR]Promenite opcije izlistavanja filmova · Postavite izgled slova u titlovima" +msgstr "[B]PODESITE VIDEO PODEŠAVANJA[/B][CR][CR]Upravljajte vašom video bibliotekom · Postavite opcije video reprodukcije - Promenite opcije izlistavanja filmova[CR]Postavite slova titlova" msgctxt "#31402" msgid "[B]CONFIGURE MUSIC SETTINGS[/B][CR][CR]Manage your music library · Set music playback options · Change music listing options[CR]Setup song submission · Set karaoke options" -msgstr "[B]KONFIGURISANjE POSTAVKI MUZIKE[/B][CR][CR]Upravljajte vašom bibliotekom muzičkih numera · Postavite opcije reprod. muzike[CR]Promenite opcije izlistavanja muzike · Postavite slanje pesama[CR]Postavite karaoke opcije" +msgstr "[B]PODESITE MUZIČKA PODEŠAVANJA[/B][CR][CR]Upravljajte vašom muzičkom bibliotekom · Postavite opcije reprodukcije muzike - Promenite opcije izlistavanja muzike[CR]Postavite slanje pesama - Postavite karaoke opcije" + +msgctxt "#31403" +msgid "[B]CONFIGURE PICTURE SETTINGS[/B][CR][CR]Set picture listing options · Configure slideshow" +msgstr "[B]PODESITE PODEŠAVANJA SLIKA[/B][CR][CR]Postavite opcije izlistavanja slika · Podesite reprodukciju slajdova" + +msgctxt "#31404" +msgid "[B]CONFIGURE WEATHER SETTINGS[/B][CR][CR]Set various cities to collect weather information" +msgstr "[B]PODESITE PODEŠAVANJA VREMENSKE PROGNOZE[/B][CR][CR]Postavite različite gradove za prikupljanje informacija o vremenskim prilikama" msgctxt "#31406" msgid "[B]CONFIGURE SYSTEM SETTINGS[/B][CR][CR]Setup and calibrate displays · Configure audio output · Setup remote controls[CR]Set power saving options · Enable debugging · Setup master lock" -msgstr "[B]KONFIGURISANjE POSTAVKI SISTEMA[/B][CR][CR]Podesite i kalibrišite ekrane · Konfigurišite zvučni izlaz[CR]Podesite daljinsko upravljanje · Postavite opcije štednje energije[CR]Omogućite evidenciju grešaka · Podesite glavnu lozinku" +msgstr "[B]PODESITE PODEŠAVANJA SISTEMA[/B][CR][CR]Podesite i kalibrišite ekrane · Podesite zvučni izlaz - Podesite daljinsko upravljanje[CR]Postavite opcije uštede energije - Omogućite evidenciju grešaka · Podesite glavnu lozinku" + +msgctxt "#31408" +msgid "[B]CONFIGURE ADD-ONS[/B][CR][CR]Manage your installed add-ons · Browse for and install add-ons from kodi.tv[CR]Modify add-on settings" +msgstr "[B]PODESITE DODATNE PROGRAME[/B][CR][CR]Upravljajte vašim instaliranim dodatnim programima · Potražite i instalirajte dodatne programe sa kodi.tv[CR]Podesite podešavanja dodatnih programa" msgctxt "#31409" msgid "[B]CONFIGURE TV SETTINGS[/B][CR][CR]Change full screen info · Manage EPG data settings" -msgstr "[B]KONFIGURISANJE TV POSTAVKI[/B][CR][CR]Promenite informacije cielog ekrana · Upravljajte postavkama podataka elektronskog programskog vodiča (EPG) " +msgstr "[B]PODESITE TV PODEŠAVANJA[/B][CR][CR]Promenite informacije celog ekrana · Upravljajte podešavanjima EPG podataka " + +msgctxt "#31410" +msgid "[B]CONFIGURE SERVICE SETTINGS[/B][CR][CR]Setup control of Kodi via UPnP and HTTP · Configure file sharing[CR]Enable Zeroconf · Configure AirPlay" +msgstr "[B]PODESITE PODEŠAVANJA SERVISA[/B][CR][CR]Podesite kontrolu Kodija putem UPnP i HTTP · Podesite daljenje datoteka[CR]Omogućite Zeroconf - Podesite AirPlay" + +msgctxt "#31411" +msgid "First run help..." +msgstr "Pomoć kod prvog pokretanja...." + +msgctxt "#31412" +msgid "This tab signifies that there is a menu off to the side of this window that contains extra options for this section. To access the menu, navigate to the left with your remote control or keyboard or place your mouse pointer over the tab. [CR][CR]Click \"OK\" to close this dialogue. It will not appear again." +msgstr "Ovaj tab pojazuje da postoji meni sa strane ovog prozora koji sadrži dodatne opcije za ovaj odeljak. Da bi pristupili ovom meniju, idite na levu stranu vašim daljinskim upravljačem ili tastaturom ili postavite pointer miša preko taba. [CR][CR]Kliknite na \"U redu\" da bi zatvorili ovaj dijalog. Neće se pojaviti ponovo." msgctxt "#31413" msgid "Local subtitle available" @@ -240,6 +484,10 @@ msgctxt "#31420" msgid "Login" msgstr "Prijava" +msgctxt "#31421" +msgid "Select your Kodi user profile[CR]to login and continue" +msgstr "Izaberite vaš Kodi korisnički profil[CR]za prijavu, a potom nastavite dalje" + msgctxt "#31422" msgid "Show or hide the login screen at startup." msgstr "Prikaži ili sakrij ekran za prijavu pri pokretanju" @@ -248,29 +496,77 @@ msgctxt "#31423" msgid "Select the profile that will be used at startup when the login screen is disabled." msgstr "Izaberite profil koji će se koristiti prilikom pokretanja kada je ekran za prijavu onemogućen" +msgctxt "#31501" +msgid "Scheduled time" +msgstr "Zakazano vreme" + msgctxt "#31502" msgid "TV" msgstr "TV" +msgctxt "#31503" +msgid "Add group" +msgstr "Dodaj grupu" + +msgctxt "#31504" +msgid "Rename group" +msgstr "Preimenuj grupu" + +msgctxt "#31505" +msgid "Delete group" +msgstr "Izbriši grupu" + msgctxt "#31506" msgid "Available[CR]Groups" msgstr "Dostupne[CR]grupe" +msgctxt "#31509" +msgid "Channel group" +msgstr "Grupa kanala" + +msgctxt "#31510" +msgid "Timer set" +msgstr "Tajmer podešen" + +msgctxt "#31511" +msgid "Channel options" +msgstr "Opcije kanala" + +msgctxt "#31901" +msgid "36-hour forecast" +msgstr "Prognoza za 36 časova" + +msgctxt "#31902" +msgid "Hourly forecast" +msgstr "Časovna prognoza" + +msgctxt "#31903" +msgid "Weekend forecast" +msgstr "Prognoza za vikend" + +msgctxt "#31904" +msgid "Daily forecast" +msgstr "Dnevna prognoza" + msgctxt "#31905" msgid "Forecast" msgstr "Prognoza" +msgctxt "#31908" +msgid "Chance of precipitation" +msgstr "Moguće padavine" + msgctxt "#31909" msgid "Fetching forecast info..." -msgstr "Dobavljanje informacija o prognozi..." +msgstr "Preuzimanje podataka prognoze..." msgctxt "#31910" msgid "Maps" -msgstr "Karta" +msgstr "Mape" msgctxt "#31950" msgid "WEATHER" -msgstr "VREME" +msgstr "VREMENSKA PROGNOZA" msgctxt "#31951" msgid "PICTURES" @@ -282,7 +578,7 @@ msgstr "TV" msgctxt "#31953" msgid "VIDEOS" -msgstr "VIDEO" +msgstr "VIDEO MATERIJAL" msgctxt "#31954" msgid "MOVIES" diff --git a/addons/skin.confluence/language/resource.language.sv_se/strings.po b/addons/skin.confluence/language/resource.language.sv_se/strings.po index 4038659b94..f22cdfb9c7 100644 --- a/addons/skin.confluence/language/resource.language.sv_se/strings.po +++ b/addons/skin.confluence/language/resource.language.sv_se/strings.po @@ -68,10 +68,22 @@ msgctxt "#31027" msgid "Location" msgstr "Plats" +msgctxt "#31028" +msgid "Poster wrap" +msgstr "Omslagssvep" + msgctxt "#31029" msgid "Fanart" msgstr "Fanart" +msgctxt "#31031" +msgid "Pic thumbs" +msgstr "Bildminiatyrer" + +msgctxt "#31032" +msgid "Image wrap" +msgstr "Bildsvep" + msgctxt "#31033" msgid "Info" msgstr "Info" @@ -104,6 +116,10 @@ msgctxt "#31046" msgid "SEEKING" msgstr "SÖKER" +msgctxt "#31048" +msgid "Visualisation presets" +msgstr "Visualiseringsval" + msgctxt "#31049" msgid "End time" msgstr "Sluttid" @@ -164,6 +180,10 @@ msgctxt "#31106" msgid "Miscellaneous options" msgstr "Övriga alternativ" +msgctxt "#31107" +msgid "Hide flagging read from video filenames [COLOR=grey3](e.g. Blu-ray, HD-DVD)[/COLOR]" +msgstr "Dölj flaggläsning från videofilnamn [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]" + msgctxt "#31108" msgid "Hide main menu buttons" msgstr "Dölj huvudmenyknappar" @@ -192,6 +212,10 @@ msgctxt "#31117" msgid "Show recently added videos" msgstr "Visa nyligen tillagda videos" +msgctxt "#31118" +msgid "Home page programs submenu" +msgstr "Hemskärmens \"program\"-undermeny" + msgctxt "#31119" msgid "Hide background fanart" msgstr "Dölj bakgrundsfanart" @@ -216,10 +240,26 @@ msgctxt "#31128" msgid "Lyrics" msgstr "Sångtexter" +msgctxt "#31129" +msgid "Hide fanart in full screen visualisation" +msgstr "Dölj fanart i fullskärmsvisualisering" + msgctxt "#31132" msgid "Lyrics add-on" msgstr "Sångtextstillägg" +msgctxt "#31134" +msgid "Home page \"Videos\" submenu" +msgstr "Hemskärmens \"video\"-undermeny" + +msgctxt "#31135" +msgid "Home page \"Music\" submenu" +msgstr "Hemskärmens \"musik\"-undermeny" + +msgctxt "#31136" +msgid "Home page \"Pictures\" submenu" +msgstr "Hemskärmens \"bilder\"-undermeny" + msgctxt "#31140" msgid "Music OSD" msgstr "Musik-OSD" @@ -268,6 +308,10 @@ msgctxt "#31303" msgid "Data provider" msgstr "Dataleverantör" +msgctxt "#31307" +msgid "Hide fanart" +msgstr "Dölj fanart" + msgctxt "#31308" msgid "Movie details" msgstr "Filmdetaljer" @@ -384,6 +428,10 @@ msgctxt "#31390" msgid "Skin default" msgstr "Skalets standard" +msgctxt "#31391" +msgid "Skin default with no caps" +msgstr "Skalets standard utan VERSALER" + msgctxt "#31392" msgid "Arial based" msgstr "Arialbaserad" @@ -400,10 +448,22 @@ msgctxt "#31402" msgid "[B]CONFIGURE MUSIC SETTINGS[/B][CR][CR]Manage your music library · Set music playback options · Change music listing options[CR]Setup song submission · Set karaoke options" msgstr "[B]KONFIGURERA MUSIKINSTÄLLNINGAR[/B][CR][CR]Hantera ditt musikbibliotek · Ange musikuppspelningsalternativ[CR]Ändra musiklistningsalternativ · Ange låtinskickning · Ange karaoke-alternativ" +msgctxt "#31403" +msgid "[B]CONFIGURE PICTURE SETTINGS[/B][CR][CR]Set picture listing options · Configure slideshow" +msgstr "[B]KONFIGURERA BILDINSTÄLLNINGAR[/B][CR][CR]Ange bildlistningsalternativ · Justera bildspel" + +msgctxt "#31404" +msgid "[B]CONFIGURE WEATHER SETTINGS[/B][CR][CR]Set various cities to collect weather information" +msgstr "[B]KONFIGURERA VÄDERINSTÄLLNINGAR[/B][CR][CR]Ange tre städer för insamling av väderinformation" + msgctxt "#31406" msgid "[B]CONFIGURE SYSTEM SETTINGS[/B][CR][CR]Setup and calibrate displays · Configure audio output · Setup remote controls[CR]Set power saving options · Enable debugging · Setup master lock" msgstr "[B]KONFIGURERA SYSTEMINSTÄLLNINGAR[/B][CR][CR]Ange och kalibrera bildskärmar · Konfigurera ljudutgång · Ställa in fjärrkontroller[CR]Ange energisparalternativ · Aktivera debuggningen · Konfigurera huvudkod och lås" +msgctxt "#31408" +msgid "[B]CONFIGURE ADD-ONS[/B][CR][CR]Manage your installed add-ons · Browse for and install add-ons from kodi.tv[CR]Modify add-on settings" +msgstr "[B]KONFIGURERA TILLÄGG[/B][CR][CR]Hantera installerade tillägg · Visa och installera tillägg från kodi.tv[CR]Ändra inställningar för tillägg" + msgctxt "#31409" msgid "[B]CONFIGURE TV SETTINGS[/B][CR][CR]Change full screen info · Manage EPG data settings" msgstr "[B]KONFIGURERA TV-INSTÄLLNINGAR[/B][CR][CR]Ändra fullskärmslägesinformation · Hantera EPG-datainställningar" @@ -416,6 +476,10 @@ msgctxt "#31411" msgid "First run help..." msgstr "Förstagångshjälp" +msgctxt "#31412" +msgid "This tab signifies that there is a menu off to the side of this window that contains extra options for this section. To access the menu, navigate to the left with your remote control or keyboard or place your mouse pointer over the tab. [CR][CR]Click \"OK\" to close this dialogue. It will not appear again." +msgstr "Denna flik visar att det finns en meny till sidan om detta fönster som innehåller extra inställningar för denna sektion. För att nå menyn, navigera till vänster med din fjärrkontroll eller tangentbord eller placera din mus ovanför fliken. [CR][CR]Klicka på \"OK\" för att stänga denna dialogruta. Den kommer inte att visas igen." + msgctxt "#31413" msgid "Local subtitle available" msgstr "Lokal undertext tillgänglig" @@ -460,6 +524,14 @@ msgctxt "#31506" msgid "Available[CR]Groups" msgstr "Tillgängliga[CR]grupper" +msgctxt "#31509" +msgid "Channel group" +msgstr "Kanalgrupp" + +msgctxt "#31510" +msgid "Timer set" +msgstr "Timer satt" + msgctxt "#31511" msgid "Channel options" msgstr "Kanalalternativ" @@ -484,6 +556,10 @@ msgctxt "#31905" msgid "Forecast" msgstr "Prognos" +msgctxt "#31908" +msgid "Chance of precipitation" +msgstr "Chans för nederbörd" + msgctxt "#31909" msgid "Fetching forecast info..." msgstr "Hämtar prognosinfo..." diff --git a/addons/visualization.dxspectrum/addon.xml b/addons/visualization.dxspectrum/addon.xml index 28b8015ccd..c257f1e2ea 100644 --- a/addons/visualization.dxspectrum/addon.xml +++ b/addons/visualization.dxspectrum/addon.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <addon id="visualization.dxspectrum" - version="1.0.29" + version="1.0.30" name="DirectX Spectrum" provider-name="Team-Kodi"> <extension diff --git a/addons/visualization.dxspectrum/resources/language/resource.language.sr_rs@latin/strings.po b/addons/visualization.dxspectrum/resources/language/resource.language.sr_rs@latin/strings.po index a3602b7c69..0b6458b47d 100644 --- a/addons/visualization.dxspectrum/resources/language/resource.language.sr_rs@latin/strings.po +++ b/addons/visualization.dxspectrum/resources/language/resource.language.sr_rs@latin/strings.po @@ -20,6 +20,10 @@ msgctxt "#30000" msgid "Mode" msgstr "Režim" +msgctxt "#30005" +msgid "Small" +msgstr "Malo" + msgctxt "#30006" msgid "Default" msgstr "Podrazumevano" diff --git a/addons/visualization.fishbmc/resources/language/resource.language.pl_pl/strings.po b/addons/visualization.fishbmc/resources/language/resource.language.pl_pl/strings.po index 07d7712686..15348e8bcb 100644 --- a/addons/visualization.fishbmc/resources/language/resource.language.pl_pl/strings.po +++ b/addons/visualization.fishbmc/resources/language/resource.language.pl_pl/strings.po @@ -46,7 +46,7 @@ msgstr "Szybkość [pomija niektóre klatki]" msgctxt "#30007" msgid "Very Low" -msgstr "Bardzo niski" +msgstr "Bardzo niskie" msgctxt "#30008" msgid "Low" diff --git a/addons/visualization.glspectrum/addon.xml b/addons/visualization.glspectrum/addon.xml index 8aa161db0d..7dc1ab9c07 100644 --- a/addons/visualization.glspectrum/addon.xml +++ b/addons/visualization.glspectrum/addon.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <addon id="visualization.glspectrum" - version="1.0.29" + version="1.0.30" name="OpenGL Spectrum" provider-name="Team-Kodi"> <extension diff --git a/addons/visualization.glspectrum/resources/language/resource.language.sr_rs@latin/strings.po b/addons/visualization.glspectrum/resources/language/resource.language.sr_rs@latin/strings.po index 1f5e3152d9..285e754af4 100644 --- a/addons/visualization.glspectrum/resources/language/resource.language.sr_rs@latin/strings.po +++ b/addons/visualization.glspectrum/resources/language/resource.language.sr_rs@latin/strings.po @@ -20,6 +20,10 @@ msgctxt "#30000" msgid "Mode" msgstr "Režim" +msgctxt "#30005" +msgid "Small" +msgstr "Malo" + msgctxt "#30006" msgid "Default" msgstr "Podrazumevano" diff --git a/addons/visualization.milkdrop/addon.xml b/addons/visualization.milkdrop/addon.xml index 54f6aa9841..f615a58d82 100644 --- a/addons/visualization.milkdrop/addon.xml +++ b/addons/visualization.milkdrop/addon.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <addon id="visualization.milkdrop" - version="1.0.27" + version="1.0.28" name="MilkDrop" provider-name="Team-Kodi"> <extension @@ -26,6 +26,7 @@ <summary lang="es_ES">MilkDrop te lleva volando a través de las ondas que estás escuchando</summary> <summary lang="es_MX">MilkDrop the lleva volando a través de las ondas de sonido que estás escuchando</summary> <summary lang="et_EE">MilkDrop viib sind lennates läbi kullatavate helilainete</summary> + <summary lang="fa_IR">MilkDrop شما را در صدایی که می شنوید به پرواز در می آورد</summary> <summary lang="fi_FI">MilkDrop lennättää sinut ääniaaltojen läpi</summary> <summary lang="fr_CA">MilkDrop vous fait voler au travers des ondes sonores que vous entendez</summary> <summary lang="fr_FR">MilkDrop vous fait voyager dans les ondes sonores de votre musique</summary> @@ -96,7 +97,7 @@ <description lang="ms_MY">MilkDrop pada asalnya adalah pemalam pengvisual untuk pemain muzik Winamp. Ketika anda mendengar muzik, MilkDrop memaparkan gelombang bunyi yang dengari dan guna pengesanan rentak untuk memicu kesan psikedelik tak terkira banyaknya, dan menghasilkan perjalanan visual yang sempurna menerusi bunyi.</description> <description lang="nb_NO">MilkDrop var originalt et visualiseringstillegg til musikkavspilleren Winamp. Mens du lytter til musikken din, tar MilkDrop deg med på en reise gjennom de faktiske lydbølgene du hører. Visualiseringen oppdager takten i musikken og bruker denne for å skape en rik, visuell ferd gjennom utallige, psykedeliske effekter.</description> <description lang="nl_NL">Milkdrop was oorspronkelijk een muziekvisualisatieplug-in voor de Winamp-muziekspeler. Terwijl u uw muziek beluistert vliegt Milkdrop u door de soundwaves die u op dat moment hoort. Op basis van de beat produceert het een veelvoud aan psychedelische effecten.</description> - <description lang="pl_PL">MilkDrop jest wizualizacją pochodzącą z odtwarzacza Winamp. W czasie słuchania muzyki, MilkDrop zabiera użytkownika w niesamowity lot pomiędzy aktualnie odtwarzanymi falami dźwiękowymi, używając detekcji beatu, która synchronizuje efekty wizualne z muzyką.</description> + <description lang="pl_PL">MilkDrop jest wizualizacją pochodzącą z odtwarzacza Winamp. W czasie słuchania muzyki, MilkDrop zabiera użytkownika w niesamowity lot pomiędzy aktualnie odtwarzanymi falami dźwiękowymi, używając detekcji rytmu, która synchronizuje efekty wizualne z muzyką.</description> <description lang="pt_BR">MilkDrop era originalmente uma visualização do reprodutor de música Winamp. Ao ouvir a sua música, o MilkDrop leva-o a voar nas ondas sonoras que está a ouvir, usando detecção de batida para desencadear uma miríade de efeitos psicodélicos. Cria, assim, uma viagem visual inesquecível pelo som.</description> <description lang="pt_PT">Originalmente, o MilkDrop era uma visualização do leitor de música Winamp. Ao ouvir a sua música, o MilkDrop leva-o a voar pelas ondas sonoras que está a ouvir, detectando o ritmo da música e desencadeando uma variedade de efeitos psicadélicos. Cria, assim, uma viagem inesquecível pelo som.</description> <description lang="ro_RO">MilkDrop a fost original un „modul” de vizualizare pentru lectorul de muzică Winamp. În timp ce ascultați muzica, MilkDrop vă face să zburați printre undele audio actuale pe care le auziți și folosește detecția bătăii pentru a activa miriada de efecte psihedelice, creând o călătorie vizuală bogată printre sunete.</description> diff --git a/addons/visualization.milkdrop/resources/language/resource.language.pl_pl/strings.po b/addons/visualization.milkdrop/resources/language/resource.language.pl_pl/strings.po index 8c73e580c4..59a5c8bf11 100644 --- a/addons/visualization.milkdrop/resources/language/resource.language.pl_pl/strings.po +++ b/addons/visualization.milkdrop/resources/language/resource.language.pl_pl/strings.po @@ -18,11 +18,11 @@ msgstr "" msgctxt "#30000" msgid "Automatic Blend Time" -msgstr "Interwał automatycznego mieszania" +msgstr "Częstotliwość mieszania" msgctxt "#30001" msgid "Time Between Presets" -msgstr "Interwał zdefiniowanych ustawień" +msgstr "Częstotliwość zmiany wzorców" msgctxt "#30002" msgid "Additional Random Time" @@ -54,27 +54,27 @@ msgstr "Aktywuj stereofoniczny tryb 3D" msgctxt "#30009" msgid "Preset Pack" -msgstr "Pakiet zdefiniowanych ustawień" +msgstr "Pakiet wzorców" msgctxt "#30010" msgid "User Preset Folder " -msgstr "Folder ustawień użytkownika" +msgstr "Folder wzorców użytkownika" msgctxt "#30011" msgid "Preset Shuffle Mode" -msgstr "Tryb losowych ustawień" +msgstr "Tryb losowych wzorców" msgctxt "#30020" msgid "WA51 Presets" -msgstr "Ustawienia WA51" +msgstr "Wzorce WA51" msgctxt "#30021" msgid "Winamp Presets" -msgstr "Ustawienia Winampa" +msgstr "Wzorce Winampa" msgctxt "#30022" msgid "User Defined Preset Folder" -msgstr "Folder zdefiniowanych ustawień użytkownika" +msgstr "Folder wzorców użytkownika" msgctxt "#30050" msgid "%2.0f secs" diff --git a/addons/visualization.projectm/addon.xml b/addons/visualization.projectm/addon.xml index 1daa38046e..e3d7e02b61 100644 --- a/addons/visualization.projectm/addon.xml +++ b/addons/visualization.projectm/addon.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <addon id="visualization.projectm" - version="1.0.29" + version="1.0.30" name="projectM" provider-name="Team-Kodi"> <extension @@ -107,7 +107,7 @@ <description lang="ms_MY">projectM ialah pengvisual muzik yang hebat. Ia yang terbaik dalam dunia Unix. Kehebatan projectM hasil dari kerja istiqamah komuniti. Pengguna seperti anda boleh mencipta praset yang menghubungkan muzik dengan visual yang hebat. Cubalah! Pengvisualan projectM merupakan perlaksanaan semula LGPL Milkdrop dibawah OpenGL. Semua projectM memerlukan kad video dengan pemecutan 3D dan tidak lupa muzik kegemaran anda.</description> <description lang="nb_NO">projectM er en flott visualisering. Det finnes ikke finere i Unix-verdenen. projectM er blitt så bra takket være et hardtarbeidende fellesskap. Du kan opprette forhåndsinnstillinger som gir utrolige visualiseringer. Prøv det! projectM visualiseringen benytter OpenGL og er en realisering av Milkdrop under en åpen programvarelisens. Alt projectM behøver er et 3D-grafikkkort og din favorittmusikk.</description> <description lang="nl_NL">projectM is een geweldige muziekvisualisatie. Er bestaat niets beters in de UNIX-wereld. Het success van projectM is het resultaat van het harde werk van de Kodi-gemeenschap. U kunt hun eigen presets instellen die muziek linken aan verbluffende visualisaties. Probeer het uit! projectM-visualisatie is beschikbaar onder de LGPL-licentie en is een herimplementatie van Milkdrop (OpenGL). Alles wat projectM vereist is een videokaart met 3D-versnelling en jouw favoriete muziek.</description> - <description lang="pl_PL">projectM to rewelacyjna wizualizacja muzyki. Nie ma nic lepszego w świecie Unixa. Wspaniałość projectM jest efektem ciężkiej pracy społeczności. Użytkownicy tacy jak Ty, mogą tworzyć efekty łączące muzykę z niesamowitymi efektami wizualnymi. Przekonaj się! projectM jest reimplementacją Milkdrop na licencji LGPL i używa OpenGL Wszystko czego wymaga projectM, to karta graficzna obsługująca akcelerację 3D oraz zasoby Twojej muzyki.</description> + <description lang="pl_PL">projectM to rewelacyjna wizualizacja muzyki. Nie ma nic lepszego w świecie Unixa. Wspaniałość projectM jest efektem ciężkiej pracy społeczności. Użytkownicy tacy jak Ty, mogą tworzyć wzorce wizualiacji łączące muzykę z niesamowitymi efektami wizualnymi. Przekonaj się! projectM jest reimplementacją Milkdrop na licencji LGPL i używa OpenGL Wszystko czego wymaga projectM, to karta graficzna obsługująca akcelerację 3D oraz zasoby Twojej muzyki.</description> <description lang="pt_BR">O projectM é um fantástico visualizador de música. Não existe nenhum melhor no mundo Unix. A grandeza do projectM advém do trabalho árduo da comunidade. Utilizadores como você podem criar pré-definições que ligam a música a visualizações incríveis. Experimente! O visualizador projectM é uma reimplementação do Milkdrop OpenGL sob uma licença LGPL. Tudo o que o projectM necessita é de uma placa gráfica com aceleração 3D e a sua música favorita.</description> <description lang="pt_PT">O projectM é uma fantástica visualização de música. Não há melhor no mundo Unix. A grandeza do projectM advém do trabalho árduo da comunidade. Qualquer utilizador pode criar pré-selecções que combinam a música com visualizações incríveis. Experimente! O visualizador projectM é uma reimplementação do Milkdrop OpenGL sob uma licença LGPL. Tudo o que o projectM precisa é de uma placa gráfica com aceleração 3D e a sua música favorita.</description> <description lang="ro_RO">projectM este un plugin uimitor. Nu există nimic mai bun în lumea Unix. Măreția projectM vine din munca întregii comunități. Utilizatori ca și tine pot crea presetări care conectează muzica cu vizualizări incredibile. Încearcă și tu! Vizualizarea projectM este o reimplementare LGPL a lui Milkdrop sub OpenGL. Tot ceea ce necesită projectM este o placă video cu accelerare 3D și muzica ta favorită.</description> diff --git a/addons/visualization.projectm/resources/language/resource.language.pl_pl/strings.po b/addons/visualization.projectm/resources/language/resource.language.pl_pl/strings.po index 5ab1d32fbc..3c3d6e3e88 100644 --- a/addons/visualization.projectm/resources/language/resource.language.pl_pl/strings.po +++ b/addons/visualization.projectm/resources/language/resource.language.pl_pl/strings.po @@ -42,19 +42,19 @@ msgstr "Tryb losowania" msgctxt "#30006" msgid "Smooth Preset Duration" -msgstr "Płynny czas trwania ustawienia" +msgstr "Płynny czas trwania wzorca" msgctxt "#30007" msgid "Preset Duration" -msgstr "Czas trwania ustawienia" +msgstr "Czas trwania wzorca" msgctxt "#30008" msgid "Beat Sensitivity" -msgstr "Czułość uderzeń" +msgstr "Czułość rytmu" msgctxt "#30009" msgid "Preset Pack" -msgstr "Pakiet zdefiniowanych ustawień" +msgstr "Pakiet wzorców" msgctxt "#30010" msgid "Default Pack" @@ -62,11 +62,11 @@ msgstr "Domyślny zestaw" msgctxt "#30011" msgid "User Defined Preset Folder" -msgstr "Zdefiniowany folder ustawień" +msgstr "Folder wzorców użytkownika" msgctxt "#30012" msgid "User Preset Folder" -msgstr "Folder ustawień użytkownika" +msgstr "Folder wzorców użytkownika" msgctxt "#30050" msgid "%2.0f secs" diff --git a/addons/visualization.vortex/resources/language/resource.language.pl_pl/strings.po b/addons/visualization.vortex/resources/language/resource.language.pl_pl/strings.po index 53ccdc7ecf..54087fcb5f 100644 --- a/addons/visualization.vortex/resources/language/resource.language.pl_pl/strings.po +++ b/addons/visualization.vortex/resources/language/resource.language.pl_pl/strings.po @@ -18,31 +18,31 @@ msgstr "" msgctxt "#30000" msgid "Random Presets" -msgstr "Losowe ustawienia" +msgstr "Losowe wzorce wizualizacji" msgctxt "#30001" msgid "Time Between Presets" -msgstr "Interwał zdefiniowanych ustawień" +msgstr "Częstotliwość zmiany wzorców" msgctxt "#30002" msgid "Additional Random Time" -msgstr "Dodatkowy czas losowy" +msgstr "Dodatkowy losowy czas" msgctxt "#30003" msgid "Lock Preset" -msgstr "Zablokuj zdefiniowane ustawienia" +msgstr "Zablokuj wzorzec" msgctxt "#30004" msgid "Enable Transitions" -msgstr "Włącz przejścia" +msgstr "Aktywuj przejścia" msgctxt "#30005" msgid "Stop first preset" -msgstr "Zatrzymaj pierwsze zdefiniowane ustawienie" +msgstr "Zatrzymaj pierwszy szablon" msgctxt "#30006" msgid "Show FPS" -msgstr "Pokaż szybkość klatek" +msgstr "Pokazuj częstotliwość klatek" msgctxt "#30007" msgid "Show debug console" @@ -50,7 +50,7 @@ msgstr "Pokazuj konsolę diagnostyczną" msgctxt "#30008" msgid "Show audio analysis" -msgstr "Pokaż analizę dźwięku " +msgstr "Pokazuj analizę dźwięku " msgctxt "#30050" msgid "%2.0f secs" diff --git a/addons/webinterface.default/addon.xml b/addons/webinterface.default/addon.xml index 64435a64f0..577cda4e50 100644 --- a/addons/webinterface.default/addon.xml +++ b/addons/webinterface.default/addon.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <addon id="webinterface.default" - version="2.2.24" + version="2.2.25" name="Default webinterface" provider-name="Team-Kodi"> <requires> @@ -59,7 +59,7 @@ <summary lang="sk_SK">Webové rozhranie tímu Kodi. (predvolené webové rozhranie pre Kodi)</summary> <summary lang="sl_SI">Spletni vmesnik ekipe Kodi. (Privzet spletni vmesnik za Kodi)</summary> <summary lang="sr_RS">Веб интерфејс од програмера Kodi-а (подразумевани веб интерфејс Kodi-а)</summary> - <summary lang="sr_RS@latin">Веб интерфејс од програмера Kodi-а (подразумевани веб интерфејс Kodi-а)</summary> + <summary lang="sr_RS@latin">Web interfejs Kodi Tima (podrazuevani web interfejs Kodia)</summary> <summary lang="sv_SE">Team-Kodi webbgränsnitt. (Kodi's standardwebbgränssnitt)</summary> <summary lang="szl">Webowy interfejs ôd Team-Kodi (wychodny webowy interface we Kodi).</summary> <summary lang="ta_IN">கோடி குழுமத்தின் இணைய இடைமுகம். (கோடியின் நிரந்தர இணைய இடைமுகம்)</summary> @@ -123,7 +123,7 @@ <description lang="sk_SK">Predvolené webové rozhranie pre Kodi; Navrhnuté pre zariadenia zobrazujúce v akomkoľvek rozlíšení</description> <description lang="sl_SI">Privzet spletni vmesnik za Kodi, ustvarjen za naprave vseh ločljivosti</description> <description lang="sr_RS">Подразумевани веб интерфејс Kodi-а, намењен уређајима свих резолуција</description> - <description lang="sr_RS@latin">Подразумевани веб интерфејс Kodi-а, намењен уређајима свих резолуција</description> + <description lang="sr_RS@latin">Podrazumevani web interfejs Kodia; Namenjen uređajima svih rezolucija</description> <description lang="sv_SE">Standardwebbgränssnitt för Kodi; Utformat för alla enheter oavsett skärmupplösning</description> <description lang="szl">Wychodny webowy interface we Kodi. Zrychtowany dlŏ maszin we wszyjskich rozdziylczościach.</description> <description lang="ta_IN">கோடி இற்கான நிரந்தர இணைய இடைமுகம்; சகல சாதனங்களின் திரைகளுக்கும் வடிவமைக்கப்பட்டது</description> diff --git a/configure.ac b/configure.ac index 190cfb9f2b..7265637628 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) -AC_INIT([kodi], [15.0.000], [http://trac.kodi.tv]) +AC_INIT([kodi], [15.1.901], [http://trac.kodi.tv]) AC_CONFIG_HEADERS([xbmc/config.h]) AH_TOP([#pragma once]) m4_include([m4/ax_prog_cc_for_build.m4]) diff --git a/media/Splash.png b/media/Splash.png Binary files differindex 061fc84f2e..094b97c06d 100644 --- a/media/Splash.png +++ b/media/Splash.png diff --git a/project/BuildDependencies/scripts/0_package.list b/project/BuildDependencies/scripts/0_package.list index b0d90e1137..fdc1d546ed 100644 --- a/project/BuildDependencies/scripts/0_package.list +++ b/project/BuildDependencies/scripts/0_package.list @@ -47,6 +47,6 @@ PIL-1.1.7p-win32.7z python-2.7.8-win32.7z sqlite-3.8.6-win32-vc120.7z swig-2.0.7-win32-1.7z -taglib-1.9.1-win32-vc120.7z +taglib-1.9.1-patched-win32-vc120.7z texturepacker-1.0.2-win32.7z tinyxml-2.6.2_3-win32-vc120.7z diff --git a/project/VS2010Express/XBMC.vcxproj b/project/VS2010Express/XBMC.vcxproj index e8e8dce36a..7f652a2eb6 100644 --- a/project/VS2010Express/XBMC.vcxproj +++ b/project/VS2010Express/XBMC.vcxproj @@ -1655,6 +1655,7 @@ <ClCompile Include="..\..\xbmc\windows\GUIWindowPointer.cpp" /> <ClCompile Include="..\..\xbmc\windows\GUIWindowScreensaver.cpp" /> <ClCompile Include="..\..\xbmc\windows\GUIWindowScreensaverDim.cpp" /> + <ClCompile Include="..\..\xbmc\windows\GUIWindowSplash.cpp" /> <ClCompile Include="..\..\xbmc\windows\GUIWindowStartup.cpp" /> <ClCompile Include="..\..\xbmc\windows\GUIWindowSystemInfo.cpp" /> <ClCompile Include="..\..\xbmc\windows\GUIWindowWeather.cpp" /> @@ -2151,6 +2152,7 @@ <ClInclude Include="..\..\xbmc\win32\IMMNotificationClient.h" /> <ClInclude Include="..\..\xbmc\win32\pch.h" /> <ClInclude Include="..\..\xbmc\win32\PlatformDefs.h" /> + <ClInclude Include="..\..\xbmc\windows\GUIWindowSplash.h" /> <ClInclude Include="..\..\xbmc\XBDateTime.h" /> <ClInclude Include="..\..\xbmc\XbmcContext.h" /> <ClInclude Include="..\..\xbmc\win32\PlatformInclude.h" /> diff --git a/project/VS2010Express/XBMC.vcxproj.filters b/project/VS2010Express/XBMC.vcxproj.filters index cada31e827..cd39ec68d4 100644 --- a/project/VS2010Express/XBMC.vcxproj.filters +++ b/project/VS2010Express/XBMC.vcxproj.filters @@ -3096,6 +3096,9 @@ <ClCompile Include="..\..\xbmc\contrib\kissfft\kiss_fftr.c"> <Filter>contrib\kissfft</Filter> </ClCompile> + <ClCompile Include="..\..\xbmc\windows\GUIWindowSplash.cpp"> + <Filter>windows</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="..\..\xbmc\win32\pch.h"> @@ -5989,6 +5992,9 @@ <ClInclude Include="..\..\xbmc\contrib\kissfft\kiss_fftr.h"> <Filter>contrib\kissfft</Filter> </ClInclude> + <ClInclude Include="..\..\xbmc\windows\GUIWindowSplash.h"> + <Filter>windows</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <ResourceCompile Include="..\..\xbmc\win32\XBMC_PC.rc"> diff --git a/project/cmake/addons/addons/audioencoder.flac/audioencoder.flac.txt b/project/cmake/addons/addons/audioencoder.flac/audioencoder.flac.txt index 8e6ed3dbb3..712ae70128 100644 --- a/project/cmake/addons/addons/audioencoder.flac/audioencoder.flac.txt +++ b/project/cmake/addons/addons/audioencoder.flac/audioencoder.flac.txt @@ -1 +1 @@ -audioencoder.flac https://github.com/xbmc/audioencoder.flac a5e2d12 +audioencoder.flac https://github.com/xbmc/audioencoder.flac 8e67185 diff --git a/project/cmake/addons/addons/pvr.argustv/pvr.argustv.txt b/project/cmake/addons/addons/pvr.argustv/pvr.argustv.txt index 31457f5d1d..7ec9c067d9 100644 --- a/project/cmake/addons/addons/pvr.argustv/pvr.argustv.txt +++ b/project/cmake/addons/addons/pvr.argustv/pvr.argustv.txt @@ -1 +1 @@ -pvr.argustv https://github.com/kodi-pvr/pvr.argustv 96c8026 +pvr.argustv https://github.com/kodi-pvr/pvr.argustv 32f0327 diff --git a/project/cmake/addons/addons/pvr.filmon/pvr.filmon.txt b/project/cmake/addons/addons/pvr.filmon/pvr.filmon.txt index f9bfe22fa7..c7bf82c9cb 100644 --- a/project/cmake/addons/addons/pvr.filmon/pvr.filmon.txt +++ b/project/cmake/addons/addons/pvr.filmon/pvr.filmon.txt @@ -1 +1 @@ -pvr.filmon https://github.com/kodi-pvr/pvr.filmon 5c41f4e +pvr.filmon https://github.com/kodi-pvr/pvr.filmon 67abb56 diff --git a/project/cmake/addons/addons/pvr.mythtv/pvr.mythtv.txt b/project/cmake/addons/addons/pvr.mythtv/pvr.mythtv.txt index 8d8ad33cbc..b5e4d6386d 100644 --- a/project/cmake/addons/addons/pvr.mythtv/pvr.mythtv.txt +++ b/project/cmake/addons/addons/pvr.mythtv/pvr.mythtv.txt @@ -1 +1 @@ -pvr.mythtv https://github.com/kodi-pvr/pvr.mythtv 538e24d +pvr.mythtv https://github.com/kodi-pvr/pvr.mythtv bf85a48 diff --git a/project/cmake/addons/addons/pvr.pctv/pvr.pctv.txt b/project/cmake/addons/addons/pvr.pctv/pvr.pctv.txt index ddcdb9c8d6..78326cee4c 100644 --- a/project/cmake/addons/addons/pvr.pctv/pvr.pctv.txt +++ b/project/cmake/addons/addons/pvr.pctv/pvr.pctv.txt @@ -1 +1 @@ -pvr.pctv https://github.com/kodi-pvr/pvr.pctv d23160c +pvr.pctv https://github.com/kodi-pvr/pvr.pctv bca8165 diff --git a/project/cmake/addons/addons/pvr.stalker/pvr.stalker.txt b/project/cmake/addons/addons/pvr.stalker/pvr.stalker.txt index dfd0ac061a..8182ad1474 100644 --- a/project/cmake/addons/addons/pvr.stalker/pvr.stalker.txt +++ b/project/cmake/addons/addons/pvr.stalker/pvr.stalker.txt @@ -1 +1 @@ -pvr.stalker https://github.com/kodi-pvr/pvr.stalker 5f6eb19 +pvr.stalker https://github.com/kodi-pvr/pvr.stalker e556508 diff --git a/system/keymaps/joystick.Sony.PLAYSTATION(R)3.Controller.xml b/system/keymaps/joystick.Sony.PLAYSTATION(R)3.Controller.xml index e4d2d07c92..43aee76c38 100644 --- a/system/keymaps/joystick.Sony.PLAYSTATION(R)3.Controller.xml +++ b/system/keymaps/joystick.Sony.PLAYSTATION(R)3.Controller.xml @@ -93,8 +93,10 @@ <button id="3">ActivateWindow(PlayerControls)</button> <axis id="1">AnalogSeekForward</axis> <axis id="2">AnalogSeekBack</axis> - <axis id="3">VolumeUp</axis> - <axis id="4">VolumeDown</axis> + <axis id="3" limit="+1">VolumeUp</axis> + <axis id="3" limit="-1">VolumeDown</axis> + <axis id="4" limit="+1">VolumeDown</axis> + <axis id="4" limit="-1">VolumeUp</axis> <axis trigger="true" rest="-32768" id="13">ScrollUp</axis> <axis trigger="true" rest="-32768" id="14">ScrollDown</axis> <button id="5">Up</button> diff --git a/system/settings/settings.xml b/system/settings/settings.xml index 8f69bcbef0..3ef33e032f 100644 --- a/system/settings/settings.xml +++ b/system/settings/settings.xml @@ -978,7 +978,7 @@ <level>1</level> <default>English</default> <constraints> - <options>iso6391languages</options> + <options>streamlanguages</options> <delimiter>,</delimiter> <minimumitems>1</minimumitems> </constraints> @@ -2828,7 +2828,7 @@ <step>512</step> <maximum>102400</maximum> </constraints> - <control type="list" format="string"> + <control type="spinner" format="string"> <formatlabel>14048</formatlabel> </control> </setting> diff --git a/tools/android/packaging/xbmc/res/layout/activity_splash.xml b/tools/android/packaging/xbmc/res/layout/activity_splash.xml index 04d417e2dd..5fdab946fa 100644 --- a/tools/android/packaging/xbmc/res/layout/activity_splash.xml +++ b/tools/android/packaging/xbmc/res/layout/activity_splash.xml @@ -10,7 +10,7 @@ android:layout_centerHorizontal="true" android:adjustViewBounds="true" android:layout_alignParentTop="true" - android:scaleType="center" + android:scaleType="centerCrop" android:src="@drawable/splash" /> <RelativeLayout diff --git a/tools/darwin/Support/Codesign.command b/tools/darwin/Support/Codesign.command index 2334741caf..6c2128db60 100755 --- a/tools/darwin/Support/Codesign.command +++ b/tools/darwin/Support/Codesign.command @@ -6,6 +6,7 @@ LIST_BINARY_EXTENSIONS="dylib so 0 vis pvr" export CODESIGN_ALLOCATE=`xcodebuild -find codesign_allocate` GEN_ENTITLEMENTS="$XBMC_DEPENDS_ROOT/buildtools-native/bin/gen_entitlements.py" +LDID="$XBMC_DEPENDS_ROOT/buildtools-native/bin/ldid" if [ ! -f ${GEN_ENTITLEMENTS} ]; then echo "error: $GEN_ENTITLEMENTS not found. Codesign won't work." @@ -17,6 +18,12 @@ if [ "${PLATFORM_NAME}" == "iphoneos" ]; then if [ -f "/Users/Shared/buildslave/keychain_unlock.sh" ]; then /Users/Shared/buildslave/keychain_unlock.sh fi + + #do fake sign - needed for jailbroken ios5.1 devices for some reason + if [ -f ${LDID} ]; then + ${LDID} -S ${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${APP_NAME} + fi + ${GEN_ENTITLEMENTS} "org.xbmc.kodi-ios" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent"; codesign -v -f -s "iPhone Developer" --entitlements "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/" diff --git a/tools/darwin/Support/copyframeworks-ios.command b/tools/darwin/Support/copyframeworks-ios.command index 328258bd08..a0031ab79a 100755 --- a/tools/darwin/Support/copyframeworks-ios.command +++ b/tools/darwin/Support/copyframeworks-ios.command @@ -75,12 +75,11 @@ chmod u+w "$TARGET_FRAMEWORKS/$(basename $a)" install_name_tool -change "$a" "$DYLIB_NAMEPATH/$(basename $a)" "$TARGET_BINARY" done -if [ "$SDK_NAME" = "iphoneos6.0" ] ; then echo "Fixing $TARGET_BINARY VideoToolbox dylib name" VTB_SDK6=/System/Library/Frameworks/VideoToolbox.framework/VideoToolbox VTB_SDK5=/System/Library/PrivateFrameworks/VideoToolbox.framework/VideoToolbox install_name_tool -change "$VTB_SDK6" "$VTB_SDK5" "$TARGET_BINARY" -fi + echo "Package $EXTERNAL_LIBS/lib/python2.6" mkdir -p "$TARGET_CONTENTS/Frameworks/lib" diff --git a/tools/darwin/packaging/ios/mkdeb-ios.sh.in b/tools/darwin/packaging/ios/mkdeb-ios.sh.in index c868141889..a638581b1d 100644 --- a/tools/darwin/packaging/ios/mkdeb-ios.sh.in +++ b/tools/darwin/packaging/ios/mkdeb-ios.sh.in @@ -67,11 +67,11 @@ mkdir -p $DIRNAME/$PACKAGE/DEBIAN echo "Package: $PACKAGE" > $DIRNAME/$PACKAGE/DEBIAN/control echo "Priority: Extra" >> $DIRNAME/$PACKAGE/DEBIAN/control echo "Name: @APP_NAME@-iOS" >> $DIRNAME/$PACKAGE/DEBIAN/control -echo "Depends: firmware (>= 4.1)" >> $DIRNAME/$PACKAGE/DEBIAN/control +echo "Depends: firmware (>= 5.1)" >> $DIRNAME/$PACKAGE/DEBIAN/control echo "Version: $VERSION-$REVISION" >> $DIRNAME/$PACKAGE/DEBIAN/control echo "Architecture: iphoneos-arm" >> $DIRNAME/$PACKAGE/DEBIAN/control echo "Installed-Size: $SIZE" >> $DIRNAME/$PACKAGE/DEBIAN/control -echo "Description: @APP_NAME@ Entertainment Center for 4.x iOS" >> $DIRNAME/$PACKAGE/DEBIAN/control +echo "Description: @APP_NAME@ Entertainment Center for 5.x iOS" >> $DIRNAME/$PACKAGE/DEBIAN/control echo "Homepage: http://kodi.tv/" >> $DIRNAME/$PACKAGE/DEBIAN/control echo "Maintainer: Memphiz" >> $DIRNAME/$PACKAGE/DEBIAN/control echo "Author: Team-@APP_NAME@" >> $DIRNAME/$PACKAGE/DEBIAN/control diff --git a/tools/depends/native/Makefile b/tools/depends/native/Makefile index 1538ed9600..17536f7777 100644 --- a/tools/depends/native/Makefile +++ b/tools/depends/native/Makefile @@ -14,7 +14,7 @@ NATIVE= m4-native gettext-native autoconf-native automake-native \ ifeq ($(OS),ios) - NATIVE += dpkg-native xz-native tar-native fakeroot-native gen_entitlements-native + NATIVE += dpkg-native xz-native tar-native fakeroot-native gen_entitlements-native ldid-native endif ifeq ($(OS),osx) diff --git a/tools/depends/native/ldid-native/Makefile b/tools/depends/native/ldid-native/Makefile new file mode 100644 index 0000000000..e356076b99 --- /dev/null +++ b/tools/depends/native/ldid-native/Makefile @@ -0,0 +1,32 @@ +include ../../Makefile.include +PREFIX=$(NATIVEPREFIX) +PLATFORM=$(NATIVEPLATFORM) +DEPS= ../../Makefile.include Makefile + +# lib name, version +LIBNAME=ldid +VERSION=1.0.0 +SOURCE=$(LIBNAME)-$(VERSION) +ARCHIVE=$(SOURCE).tar.gz + +CLEAN_FILES=$(ARCHIVE) $(PLATFORM) + +all: .installed-$(PLATFORM) + +$(TARBALLS_LOCATION)/$(ARCHIVE): + cd $(TARBALLS_LOCATION); $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE) + +$(PLATFORM): $(TARBALLS_LOCATION)/$(ARCHIVE) $(DEPS) + rm -rf $(PLATFORM)/*; mkdir -p $(PLATFORM) + cd $(PLATFORM); $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) + +.installed-$(PLATFORM):$(PLATFORM) + cp $(PLATFORM)/ldid $(NATIVEPREFIX)/bin + touch $@ + +clean: + rm -r $(PLATFORM) + rm -f .installed-$(PLATFORM) + +distclean:: + rm -rf $(PLATFORM) .installed-$(PLATFORM) diff --git a/tools/depends/target/ffmpeg/FFMPEG-VERSION b/tools/depends/target/ffmpeg/FFMPEG-VERSION index 98713d727e..793f669556 100644 --- a/tools/depends/target/ffmpeg/FFMPEG-VERSION +++ b/tools/depends/target/ffmpeg/FFMPEG-VERSION @@ -1,5 +1,5 @@ LIBNAME=ffmpeg BASE_URL=https://github.com/xbmc/FFmpeg/archive -VERSION=2.6.3-Isengard +VERSION=2.6.4-Isengard ARCHIVE=$(LIBNAME)-$(VERSION).tar.gz diff --git a/version.txt b/version.txt index 3ecc000370..888ba622d6 100644 --- a/version.txt +++ b/version.txt @@ -2,10 +2,10 @@ APP_NAME Kodi COMPANY_NAME XBMC-Foundation WEBSITE http://kodi.tv VERSION_MAJOR 15 -VERSION_MINOR 0 -VERSION_TAG -VERSION_CODE 150000 -ADDON_API 15.0.000 +VERSION_MINOR 2 +VERSION_TAG RC1 +VERSION_CODE 151901 +ADDON_API 15.1.901 # Notes: # Change AC_INIT in configure.ac diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp index 697f27836c..352df29fd4 100644 --- a/xbmc/Application.cpp +++ b/xbmc/Application.cpp @@ -299,7 +299,6 @@ CApplication::CApplication(void) m_Autorun = new CAutorun(); #endif - m_splash = NULL; m_threadID = 0; m_progressTrackingPlayCountUpdate = false; m_currentStackPosition = 0; @@ -342,7 +341,7 @@ bool CApplication::OnEvent(XBMC_Event& newEvent) CApplicationMessenger::Get().Quit(); break; case XBMC_VIDEORESIZE: - if (!g_application.m_bInitializing && + if (g_windowManager.Initialized() && !g_advancedSettings.m_fullScreen) { g_Windowing.SetWindowResolution(newEvent.resize.w, newEvent.resize.h); @@ -798,20 +797,7 @@ bool CApplication::CreateGUI() CDisplaySettings::Get().SetCurrentResolution(RES_DESKTOP, true); if (g_advancedSettings.m_splashImage) - { - std::string strUserSplash = "special://home/media/Splash.png"; - if (CFile::Exists(strUserSplash)) - { - CLog::Log(LOGINFO, "load user splash image: %s", CSpecialProtocol::TranslatePath(strUserSplash).c_str()); - m_splash = new CSplash(strUserSplash); - } - else - { - CLog::Log(LOGINFO, "load default splash image: %s", CSpecialProtocol::TranslatePath("special://xbmc/media/Splash.png").c_str()); - m_splash = new CSplash("special://xbmc/media/Splash.png"); - } - m_splash->Show(); - } + CSplash::Get().Show(); // The key mappings may already have been loaded by a peripheral CLog::Log(LOGINFO, "load keymapping"); @@ -823,6 +809,7 @@ bool CApplication::CreateGUI() info.iWidth, info.iHeight, info.strMode.c_str()); + g_windowManager.Initialize(); return true; @@ -1157,6 +1144,12 @@ bool CApplication::Initialize() g_windowManager.CreateWindows(); /* window id's 3000 - 3100 are reserved for python */ + // initialize splash window after splash screen disappears + // because we need a real window in the background which gets + // rendered while we load the main window or enter the master lock key + if (g_advancedSettings.m_splashImage) + g_windowManager.ActivateWindow(WINDOW_SPLASH); + // Make sure we have at least the default skin string defaultSkin = ((const CSettingString*)CSettings::Get().GetSetting("lookandfeel.skin"))->GetDefault(); if (!LoadSkin(CSettings::Get().GetString("lookandfeel.skin")) && !LoadSkin(defaultSkin)) @@ -1165,9 +1158,6 @@ bool CApplication::Initialize() return false; } - if (g_advancedSettings.m_splashImage) - SAFE_DELETE(m_splash); - if (CSettings::Get().GetBool("masterlock.startuplock") && CProfilesManager::Get().GetMasterProfile().getLockMode() != LOCK_MODE_EVERYONE && !CProfilesManager::Get().GetMasterProfile().getLockCode().empty()) @@ -1190,17 +1180,15 @@ bool CApplication::Initialize() #endif ADDON::CAddonMgr::Get().StartServices(false); - // let's start the PVR manager and decide if the PVR manager handle the startup window activation - if (StartPVRManager()) - uiInitializationFinished = false; - else - { - int firstWindow = g_SkinInfo->GetFirstWindow(); - // the startup window is considered part of the initialization as it most likely switches to the final window - uiInitializationFinished = firstWindow != WINDOW_STARTUP_ANIM; + // start the PVR manager + StartPVRManager(); - g_windowManager.ActivateWindow(firstWindow); - } + // activate the configured start window + int firstWindow = g_SkinInfo->GetFirstWindow(); + g_windowManager.ActivateWindow(firstWindow); + + // the startup window is considered part of the initialization as it most likely switches to the final window + uiInitializationFinished = firstWindow != WINDOW_STARTUP_ANIM; CStereoscopicsManager::Get().Initialize(); } @@ -1306,18 +1294,12 @@ bool CApplication::StartServer(enum ESERVERS eServer, bool bStart, bool bWait/* return ret; } -bool CApplication::StartPVRManager() +void CApplication::StartPVRManager() { if (!CSettings::Get().GetBool("pvrmanager.enabled")) - return false; - - int firstWindowId = 0; - if (g_PVRManager.IsPVRWindow(g_SkinInfo->GetStartWindow())) - firstWindowId = g_SkinInfo->GetFirstWindow(); - - g_PVRManager.Start(true, firstWindowId); + return; - return (firstWindowId > 0); + g_PVRManager.Start(true); } void CApplication::StopPVRManager() @@ -2433,9 +2415,9 @@ bool CApplication::OnAction(const CAction &action) step *= action.GetRepeat() * 50; // 50 fps #endif if (action.GetID() == ACTION_VOLUME_UP) - volume += (float)fabs(action.GetAmount()) * action.GetAmount() * step; + volume += (float)(action.GetAmount() * action.GetAmount() * step); else if (action.GetID() == ACTION_VOLUME_DOWN) - volume -= (float)fabs(action.GetAmount()) * action.GetAmount() * step; + volume -= (float)(action.GetAmount() * action.GetAmount() * step); else volume = action.GetAmount() * step; if (volume != m_volumeLevel) @@ -3899,6 +3881,9 @@ bool CApplication::OnMessage(CGUIMessage& message) } else if (message.GetParam1() == GUI_MSG_UI_READY) { + // remove splash window + g_windowManager.Delete(WINDOW_SPLASH); + if (m_fallbackLanguageLoaded) CGUIDialogOK::ShowAndGetInput(24133, 24134); diff --git a/xbmc/Application.h b/xbmc/Application.h index 4b50ab2d38..362dd7afca 100644 --- a/xbmc/Application.h +++ b/xbmc/Application.h @@ -147,11 +147,7 @@ public: bool StartServer(enum ESERVERS eServer, bool bStart, bool bWait = false); - /*! - * @brief Starts the PVR manager and decide if the manager should handle the startup window activation. - * @return true, if the startup window activation is handled by the pvr manager, otherwise false - */ - bool StartPVRManager(); + void StartPVRManager(); void StopPVRManager(); bool IsCurrentThread() const; void Stop(int exitCode); @@ -367,7 +363,6 @@ public: bool SwitchToFullScreen(bool force = false); - CSplash* GetSplash() { return m_splash; } void SetRenderGUI(bool renderGUI); bool GetRenderGUI() const { return m_renderGUI; }; @@ -448,7 +443,6 @@ protected: CFileItemPtr m_stackFileItemToUpdate; std::string m_prevMedia; - CSplash* m_splash; ThreadIdentifier m_threadID; // application thread ID. Used in applicationMessanger to know where we are firing a thread with delay from. bool m_bInitializing; bool m_bPlatformDirectories; diff --git a/xbmc/ApplicationMessenger.cpp b/xbmc/ApplicationMessenger.cpp index 76ba9f29ec..e0152aace7 100644 --- a/xbmc/ApplicationMessenger.cpp +++ b/xbmc/ApplicationMessenger.cpp @@ -40,7 +40,6 @@ #include "guilib/GUIKeyboardFactory.h" #include "guilib/Resolution.h" #include "GUIInfoManager.h" -#include "utils/Splash.h" #include "cores/VideoRenderers/RenderManager.h" #include "cores/AudioEngine/AEFactory.h" #include "music/tags/MusicInfoTag.h" @@ -270,14 +269,12 @@ void CApplicationMessenger::ProcessMessage(ThreadMessage *pMsg) case TMSG_HIBERNATE: { - g_PVRManager.SetWakeupCommand(); g_powerManager.Hibernate(); } break; case TMSG_SUSPEND: { - g_PVRManager.SetWakeupCommand(); g_powerManager.Suspend(); } break; @@ -802,13 +799,6 @@ void CApplicationMessenger::ProcessMessage(ThreadMessage *pMsg) g_application.ShowVolumeBar(&action); } break; - - case TMSG_SPLASH_MESSAGE: - { - if (g_application.GetSplash()) - g_application.GetSplash()->Show(pMsg->strParam); - } - break; case TMSG_DISPLAY_SETUP: { @@ -1332,18 +1322,6 @@ void CApplicationMessenger::ShowVolumeBar(bool up) SendMessage(tMsg, false); } -void CApplicationMessenger::SetSplashMessage(const std::string& message) -{ - ThreadMessage tMsg = {TMSG_SPLASH_MESSAGE}; - tMsg.strParam = message; - SendMessage(tMsg, true); -} - -void CApplicationMessenger::SetSplashMessage(int stringID) -{ - SetSplashMessage(g_localizeStrings.Get(stringID)); -} - bool CApplicationMessenger::SetupDisplay() { bool result; diff --git a/xbmc/ApplicationMessenger.h b/xbmc/ApplicationMessenger.h index fdaab45381..8e1b4aa6a1 100644 --- a/xbmc/ApplicationMessenger.h +++ b/xbmc/ApplicationMessenger.h @@ -111,7 +111,6 @@ namespace MUSIC_INFO #define TMSG_CALLBACK 800 #define TMSG_VOLUME_SHOW 900 -#define TMSG_SPLASH_MESSAGE 901 #define TMSG_DISPLAY_SETUP 1000 #define TMSG_DISPLAY_DESTROY 1001 @@ -251,9 +250,6 @@ public: void ShowVolumeBar(bool up); - void SetSplashMessage(const std::string& message); - void SetSplashMessage(int stringID); - /*! \brief Used to enable/disable PVR system without waiting. \param onOff if true it becomes switched on otherwise off */ diff --git a/xbmc/GUIInfoManager.cpp b/xbmc/GUIInfoManager.cpp index 8cf1202b94..35f0d1dbcc 100644 --- a/xbmc/GUIInfoManager.cpp +++ b/xbmc/GUIInfoManager.cpp @@ -1203,10 +1203,8 @@ int CGUIInfoManager::TranslateSingleString(const std::string &strCondition, bool { // TODO: The parameter for these should really be on the first not the second property if (prop.param().find("xml") != std::string::npos) return AddMultiInfo(GUIInfo(window_bools[i].val, 0, ConditionalStringParameter(prop.param()))); - int winID = prop.param().empty() ? 0 : CButtonTranslator::TranslateWindow(prop.param()); - if (winID != WINDOW_INVALID) - return AddMultiInfo(GUIInfo(window_bools[i].val, winID, 0)); - return 0; + int winID = prop.param().empty() ? WINDOW_INVALID : CButtonTranslator::TranslateWindow(prop.param()); + return winID != WINDOW_INVALID ? AddMultiInfo(GUIInfo(window_bools[i].val, winID, 0)) : window_bools[i].val; } } } @@ -3713,8 +3711,6 @@ std::string CGUIInfoManager::GetMusicLabel(int item) return StringUtils::Format("%s", m_audioInfo.audioCodecName.c_str()); } break; - case MUSICPLAYER_LYRICS: - return GetItemLabel(m_currentFile, AddListItemProp("lyrics")); } return GetMusicTagLabel(item, m_currentFile); } diff --git a/xbmc/LangInfo.cpp b/xbmc/LangInfo.cpp index 92d134b902..c0c7034416 100644 --- a/xbmc/LangInfo.cpp +++ b/xbmc/LangInfo.cpp @@ -39,6 +39,7 @@ #include "utils/XMLUtils.h" #include <algorithm> +#include <set> using namespace std; using namespace PVR; @@ -951,7 +952,12 @@ void CLangInfo::SetCurrentRegion(const std::string& strName) if (CSettings::Get().GetString("locale.longdateformat") == SETTING_REGIONAL_DEFAULT) SetLongDateFormat(m_currentRegion->m_strDateFormatLong); if (CSettings::Get().GetString("locale.use24hourclock") == SETTING_REGIONAL_DEFAULT) + { Set24HourClock(m_currentRegion->m_strTimeFormat); + + // update the time format + SetTimeFormat(CSettings::Get().GetString("locale.timeformat")); + } if (CSettings::Get().GetString("locale.timeformat") == SETTING_REGIONAL_DEFAULT) SetTimeFormat(m_currentRegion->m_strTimeFormat); if (CSettings::Get().GetString("locale.temperatureunit") == SETTING_REGIONAL_DEFAULT) @@ -1134,6 +1140,12 @@ void CLangInfo::SettingOptionsStreamLanguagesFiller(const CSetting *setting, std std::string dummy; SettingOptionsISO6391LanguagesFiller(NULL, list, dummy, NULL); + SettingOptionsLanguageNamesFiller(NULL, list, dummy, NULL); + + // convert the vector to a set and back again to remove duplicates + std::set<std::pair<std::string, std::string>> languages(list.begin(), list.end()); + list.assign(languages.begin(), languages.end()); + std::sort(list.begin(), list.end(), SortLanguage()); } void CLangInfo::SettingOptionsRegionsFiller(const CSetting *setting, std::vector< std::pair<std::string, std::string> > &list, std::string ¤t, void *data) diff --git a/xbmc/SectionLoader.cpp b/xbmc/SectionLoader.cpp index df926843e7..b9cd896614 100644 --- a/xbmc/SectionLoader.cpp +++ b/xbmc/SectionLoader.cpp @@ -134,7 +134,6 @@ void CSectionLoader::UnloadAll() while (it != g_sectionLoader.m_vecLoadedDLLs.end()) { CDll& dll = *it; - CLog::Log(LOGDEBUG,"SECTION:UnloadAll(DLL: %s)", dll.m_strDllName.c_str()); if (dll.m_pDll) DllLoaderContainer::ReleaseModule(dll.m_pDll); it = g_sectionLoader.m_vecLoadedDLLs.erase(it); diff --git a/xbmc/addons/AddonManager.cpp b/xbmc/addons/AddonManager.cpp index 81b80b672c..1c07fe0673 100644 --- a/xbmc/addons/AddonManager.cpp +++ b/xbmc/addons/AddonManager.cpp @@ -789,6 +789,8 @@ std::string CAddonMgr::GetTranslatedString(const cp_cfg_element_t *root, const c translatedValues.insert(std::make_pair(lang, child.value != NULL ? child.value : "")); else if (lang == NULL || strcmp(lang, "en") == 0 || strcmp(lang, "en_GB") == 0) translatedValues.insert(std::make_pair("en_GB", child.value != NULL ? child.value : "")); + else if (strcmp(lang, "no") == 0) + translatedValues.insert(std::make_pair("nb_NO", child.value != NULL ? child.value : "")); } } diff --git a/xbmc/addons/GUIWindowAddonBrowser.cpp b/xbmc/addons/GUIWindowAddonBrowser.cpp index 362301458b..ff53f094df 100644 --- a/xbmc/addons/GUIWindowAddonBrowser.cpp +++ b/xbmc/addons/GUIWindowAddonBrowser.cpp @@ -302,17 +302,23 @@ void CGUIWindowAddonBrowser::UpdateButtons() CGUIMediaWindow::UpdateButtons(); } -static bool FilterVar(bool valid, const CVariant& variant, - const std::string& check) +static bool IsForeign(const std::string& languages) { - if (!valid) + if (languages.empty()) return false; - if (variant.isNull() || variant.asString().empty()) - return false; - - std::string regions = variant.asString(); - return regions.find(check) == std::string::npos; + for (const auto& lang : StringUtils::Split(languages, " ")) + { + if (lang == "en" || + lang == g_langInfo.GetLocale().GetLanguageCode() || + lang == g_langInfo.GetLocale().ToShortString()) + return false; + + // for backwards compatibility + if (lang == "no" && g_langInfo.GetLocale().ToShortString() == "nb_NO") + return false; + } + return true; } bool CGUIWindowAddonBrowser::GetDirectory(const std::string& strDirectory, @@ -350,14 +356,11 @@ bool CGUIWindowAddonBrowser::GetDirectory(const std::string& strDirectory, int i=0; while (i < items.Size()) { - if (!FilterVar(true, items[i]->GetProperty("Addon.Language"), "en") || - !FilterVar(true, items[i]->GetProperty("Addon.Language"), g_langInfo.GetLocale().GetLanguageCode()) || - !FilterVar(true, items[i]->GetProperty("Addon.Language"), g_langInfo.GetLocale().ToShortString())) - { - i++; - } - else + auto prop = items[i]->GetProperty("Addon.Language"); + if (!prop.isNull() && IsForeign(prop.asString())) items.Remove(i); + else + ++i; } } if (CSettings::Get().GetBool("general.addonbrokenfilter")) diff --git a/xbmc/cores/VideoRenderers/OverlayRenderer.cpp b/xbmc/cores/VideoRenderers/OverlayRenderer.cpp index 08ffdc659b..ba6919cb4f 100644 --- a/xbmc/cores/VideoRenderers/OverlayRenderer.cpp +++ b/xbmc/cores/VideoRenderers/OverlayRenderer.cpp @@ -203,16 +203,19 @@ void CRenderer::Render(int idx) float adjust_height = 0.0f; - if(subalign == SUBTITLE_ALIGN_TOP_INSIDE || - subalign == SUBTITLE_ALIGN_TOP_OUTSIDE) + if (o->m_type == COverlay::TYPE_GUITEXT) { - adjust_height = cur_height; - cur_height += o->m_height; - } - else - { - total_height -= o->m_height; - adjust_height = -total_height; + if(subalign == SUBTITLE_ALIGN_TOP_INSIDE || + subalign == SUBTITLE_ALIGN_TOP_OUTSIDE) + { + adjust_height = cur_height; + cur_height += o->m_height; + } + else + { + total_height -= o->m_height; + adjust_height = -total_height; + } } Render(o, adjust_height); diff --git a/xbmc/cores/VideoRenderers/OverlayRendererGUI.cpp b/xbmc/cores/VideoRenderers/OverlayRendererGUI.cpp index c77ce0316b..d4b65d3b78 100644 --- a/xbmc/cores/VideoRenderers/OverlayRendererGUI.cpp +++ b/xbmc/cores/VideoRenderers/OverlayRendererGUI.cpp @@ -136,6 +136,8 @@ COverlayText::COverlayText(CDVDOverlayText * src) } m_width = 0; m_height = 0; + + m_type = TYPE_GUITEXT; } COverlayText::~COverlayText() diff --git a/xbmc/cores/VideoRenderers/RenderManager.cpp b/xbmc/cores/VideoRenderers/RenderManager.cpp index 7f439495b5..cc6a2f629a 100644 --- a/xbmc/cores/VideoRenderers/RenderManager.cpp +++ b/xbmc/cores/VideoRenderers/RenderManager.cpp @@ -1219,8 +1219,10 @@ void CXBMCRenderManager::DiscardBuffer() while(!m_queued.empty()) requeue(m_discard, m_queued); + m_Queue[m_presentsource].timestamp = GetPresentTime(); + if(m_presentstep == PRESENT_READY) - m_presentstep = PRESENT_IDLE; + m_presentstep = PRESENT_IDLE; m_presentevent.notifyAll(); } diff --git a/xbmc/cores/dvdplayer/DVDClock.cpp b/xbmc/cores/dvdplayer/DVDClock.cpp index 1365682209..0ddb91d059 100644 --- a/xbmc/cores/dvdplayer/DVDClock.cpp +++ b/xbmc/cores/dvdplayer/DVDClock.cpp @@ -169,7 +169,16 @@ bool CDVDClock::Update(double clock, double absolute, double limit, const char* double was_absolute = SystemToAbsolute(m_startClock); double was_clock = m_iDisc + absolute - was_absolute; lock.Leave(); - if(std::abs(clock - was_clock) > limit) + + double error = std::abs(clock - was_clock); + + // skip minor updates while speed adjust is active + // -> adjusting buffer levels + if (m_speedAdjust != 0 && error < DVD_MSEC_TO_TIME(100)) + { + return false; + } + else if (error > limit) { Discontinuity(clock, absolute); diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Overlay/DVDOverlayCodecFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Overlay/DVDOverlayCodecFFmpeg.cpp index 1bb0102012..06f81c895c 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/Overlay/DVDOverlayCodecFFmpeg.cpp +++ b/xbmc/cores/dvdplayer/DVDCodecs/Overlay/DVDOverlayCodecFFmpeg.cpp @@ -243,6 +243,16 @@ CDVDOverlay* CDVDOverlayCodecFFmpeg::GetOverlay() m_height = m_pCodecContext->height; m_width = m_pCodecContext->width; + // ETSI EN 300 743 V1.3.1 + // 5.3.1 + // Absence of a DDS in a stream implies that the stream is coded in accordance with EN 300 743 (V1.2.1) [5] and that a + // display width of 720 pixels and a display height of 576 lines may be assumed. + if (!m_height && !m_width) + { + m_width = 720; + m_height = 576; + } + RENDER_STEREO_MODE render_stereo_mode = g_graphicsContext.GetStereoMode(); if (render_stereo_mode != RENDER_STEREO_MODE_OFF) { @@ -273,39 +283,6 @@ CDVDOverlay* CDVDOverlayCodecFFmpeg::GetOverlay() overlay->height = rect.h; overlay->bForced = rect.flags != 0; - int right = overlay->x + overlay->width; - int bottom = overlay->y + overlay->height; - - if (render_stereo_mode == RENDER_STEREO_MODE_OFF) - { - if(bottom > m_height) - { - if (bottom <= 480) - m_height = 480; - else if(bottom <= 576) - m_height = 576; - else if(bottom <= 720) - m_height = 720; - else if(bottom <= 1080) - m_height = 1080; - else - m_height = bottom; - } - if(right > m_width) - { - if (right <= 720) - m_width = 720; - else if(right <= 1024) - m_width = 1024; - else if(right <= 1280) - m_width = 1280; - else if(right <= 1920) - m_width = 1920; - else - m_width = right; - } - } - overlay->source_width = m_width; overlay->source_height = m_height; diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h index 6fb88e03f5..e5a209db6a 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h +++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h @@ -244,22 +244,6 @@ public: */ virtual void SetSpeed(int iSpeed) {}; - /* - * returns the number of demuxer bytes in any internal buffers - */ - virtual int GetDataSize(void) - { - return 0; - } - - /* - * returns the time in seconds for demuxer bytes in any internal buffers - */ - virtual double GetTimeSize(void) - { - return 0; - } - enum EFilterFlags { FILTER_NONE = 0x0, FILTER_DEINTERLACE_YADIF = 0x1, /* use first deinterlace mode */ diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp index 0dee528661..4269d8ae5c 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp +++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp @@ -97,6 +97,15 @@ enum PixelFormat CDVDVideoCodecFFmpeg::GetFormat( struct AVCodecContext * avctx return avcodec_default_get_format(avctx, fmt); } + // hardware decoder de-selected, restore standard ffmpeg + if (ctx->GetHardware()) + { + ctx->SetHardware(NULL); + avctx->get_buffer2 = avcodec_default_get_buffer2; + avctx->slice_flags = 0; + avctx->hwaccel_context = 0; + } + const PixelFormat * cur = fmt; while(*cur != PIX_FMT_NONE) { @@ -159,15 +168,6 @@ enum PixelFormat CDVDVideoCodecFFmpeg::GetFormat( struct AVCodecContext * avctx cur++; } - // hardware decoder de-selected, restore standard ffmpeg - if (ctx->GetHardware()) - { - ctx->SetHardware(NULL); - avctx->get_buffer2 = avcodec_default_get_buffer2; - avctx->slice_flags = 0; - avctx->hwaccel_context = 0; - } - ctx->m_decoderState = STATE_HW_FAILED; return avcodec_default_get_format(avctx, fmt); } @@ -353,7 +353,6 @@ void CDVDVideoCodecFFmpeg::Dispose() m_pCodecContext = NULL; } SAFE_RELEASE(m_pHardware); - DisposeHWDecoders(); FilterClose(); } @@ -573,8 +572,6 @@ int CDVDVideoCodecFFmpeg::Decode(uint8_t* pData, int iSize, double dts, double p if(result & VC_FLUSHED) Reset(); - DisposeHWDecoders(); - return result; } @@ -919,17 +916,7 @@ void CDVDVideoCodecFFmpeg::SetCodecControl(int flags) void CDVDVideoCodecFFmpeg::SetHardware(IHardwareDecoder* hardware) { - if (m_pHardware) - m_disposeDecoders.push_back(m_pHardware); + SAFE_RELEASE(m_pHardware); m_pHardware = hardware; UpdateName(); } - -void CDVDVideoCodecFFmpeg::DisposeHWDecoders() -{ - while (!m_disposeDecoders.empty()) - { - m_disposeDecoders.back()->Release(); - m_disposeDecoders.pop_back(); - } -} diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.h index 52705651c8..6906e795ce 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.h +++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.h @@ -82,7 +82,6 @@ protected: int FilterOpen(const std::string& filters, bool scale); void FilterClose(); int FilterProcess(AVFrame* frame); - void DisposeHWDecoders(); void UpdateName() { @@ -117,7 +116,6 @@ protected: std::string m_name; int m_decoderState; IHardwareDecoder *m_pHardware; - std::vector<IHardwareDecoder*> m_disposeDecoders; int m_iLastKeyframe; double m_dts; bool m_started; diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DXVA.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/DXVA.cpp index 28601ef359..68f5edc0a6 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DXVA.cpp +++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DXVA.cpp @@ -818,7 +818,15 @@ bool CDecoder::Open(AVCodecContext *avctx, AVCodecContext* mainctx, enum PixelFo return false; } - m_format.SampleWidth = avctx->coded_width; + CLog::Log(LOGDEBUG, "DXVA - source requires %d references", avctx->refs); + if (m_input == DXVADDI_Intel_ModeH264_E && avctx->refs > 11) + { + const dxva2_mode_t *mode = dxva2_find_mode(&m_input); + CLog::Log(LOGWARNING, "DXVA - too many references %d for selected decoder '%s'.", avctx->refs, mode->name); + return false; + } + + m_format.SampleWidth = avctx->coded_width; m_format.SampleHeight = avctx->coded_height; m_format.SampleFormat.SampleFormat = DXVA2_SampleProgressiveFrame; m_format.SampleFormat.VideoLighting = DXVA2_VideoLighting_dim; @@ -929,8 +937,6 @@ bool CDecoder::Open(AVCodecContext *avctx, AVCodecContext* mainctx, enum PixelFo else m_refs = 2; } - CLog::Log(LOGDEBUG, "DXVA - source requires %d references", avctx->refs); - DXVA2_ConfigPictureDecode config = {}; if (!m_dxva_context->GetConfig(m_input, &m_format, config)) return false; diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp index 82b5baa538..7c84557499 100644 --- a/xbmc/cores/dvdplayer/DVDPlayer.cpp +++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp @@ -1786,13 +1786,9 @@ void CDVDPlayer::HandlePlaySpeed() double adjust = -1.0; // a unique value if (m_clock.GetSpeedAdjust() == 0.0 && m_dvdPlayerAudio->GetLevel() < 5) adjust = -0.01; - else if (m_clock.GetSpeedAdjust() == 0.0 && m_dvdPlayerAudio->GetLevel() > 95) - adjust = 0.01; if (m_clock.GetSpeedAdjust() < 0 && m_dvdPlayerAudio->GetLevel() > 20) adjust = 0.0; - else if (m_clock.GetSpeedAdjust() > 0 && m_dvdPlayerAudio->GetLevel() < 80) - adjust = 0.0; if (adjust != -1.0) { @@ -1831,7 +1827,7 @@ void CDVDPlayer::HandlePlaySpeed() check = false; // skip if frame on screen has not changed else if (m_SpeedState.lastpts == m_dvdPlayerVideo->GetCurrentPts() && - fabs(m_SpeedState.lastabstime - CDVDClock::GetAbsoluteClock()) < DVD_MSEC_TO_TIME(1000)) + (m_SpeedState.lastpts > m_State.dts || m_playSpeed > 0)) check = false; if (check) @@ -2988,7 +2984,7 @@ void CDVDPlayer::GetGeneralInfo(std::string& strGeneralInfo) CSingleLock lock(m_StateSection); if(m_StateInput.cache_bytes >= 0) { - strBuf += StringUtils::Format(" cache:%s %2.0f%%" + strBuf += StringUtils::Format(" forward:%s %2.0f%%" , StringUtils::SizeToString(m_StateInput.cache_bytes).c_str() , m_StateInput.cache_level * 100); if(m_playSpeed == 0 || m_caching == CACHESTATE_FULL) @@ -3024,7 +3020,7 @@ void CDVDPlayer::GetGeneralInfo(std::string& strGeneralInfo) CSingleLock lock(m_StateSection); if(m_StateInput.cache_bytes >= 0) { - strBuf += StringUtils::Format(" cache:%s %2.0f%%" + strBuf += StringUtils::Format(" forward:%s %2.0f%%" , StringUtils::SizeToString(m_StateInput.cache_bytes).c_str() , m_StateInput.cache_level * 100); if(m_playSpeed == 0 || m_caching == CACHESTATE_FULL) diff --git a/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp b/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp index f1a7e60c3a..46fa635618 100644 --- a/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp +++ b/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp @@ -435,6 +435,8 @@ void CDVDPlayerVideo::Process() m_stalled = true; m_started = false; + + g_renderManager.DiscardBuffer(); } else if (pMsg->IsType(CDVDMsg::VIDEO_NOSKIP)) { @@ -807,34 +809,6 @@ void CDVDPlayerVideo::Flush() m_messageQueue.Put(new CDVDMsg(CDVDMsg::GENERAL_FLUSH), 1); } -int CDVDPlayerVideo::GetLevel() const -{ - int level = m_messageQueue.GetLevel(); - - // fast exit, if the message queue is full, we do not care about the codec queue. - if (level == 100) - return level; - - // Now for the harder choices, the message queue could be time or size based. - // In order to return the proper summed level, we need to know which. - if (m_messageQueue.IsDataBased()) - { - int datasize = m_messageQueue.GetDataSize(); - if (m_pVideoCodec) - datasize += m_pVideoCodec->GetDataSize(); - return min(100, MathUtils::round_int((100.0 * datasize) / m_messageQueue.GetMaxDataSize())); - } - else - { - double timesize = m_messageQueue.GetTimeSize(); - if (m_pVideoCodec) - timesize += m_pVideoCodec->GetTimeSize(); - return min(100, MathUtils::round_int(100.0 * m_messageQueue.GetMaxTimeSize() * timesize)); - } - - return level; -} - #ifdef HAS_VIDEO_PLAYBACK void CDVDPlayerVideo::ProcessOverlays(DVDVideoPicture* pSource, double pts) { @@ -1146,6 +1120,10 @@ int CDVDPlayerVideo::OutputPicture(const DVDVideoPicture* src, double pts) } return result | EOS_DROPPED; } + else if (pts_org < iPlayingClock) + { + return result | EOS_DROPPED; + } if (iSleepTime > DVD_MSEC_TO_TIME(20)) iSleepTime = DVD_MSEC_TO_TIME(20); @@ -1165,9 +1143,6 @@ int CDVDPlayerVideo::OutputPicture(const DVDVideoPicture* src, double pts) m_droppingStats.AddOutputDropGain(pts, 1/m_fFrameRate); return result | EOS_DROPPED; } - - if (iSleepTime > DVD_MSEC_TO_TIME(20)) - iSleepTime = DVD_MSEC_TO_TIME(20); } // sync clock if we are master @@ -1205,7 +1180,7 @@ int CDVDPlayerVideo::OutputPicture(const DVDVideoPicture* src, double pts) int maxWaitTime = std::max(DVD_TIME_TO_MSEC(iSleepTime) + 500, 50); // don't wait when going ff if (m_speed > DVD_PLAYSPEED_NORMAL) - maxWaitTime = 0; + maxWaitTime = std::max(DVD_TIME_TO_MSEC(iSleepTime), 0); int buffer = g_renderManager.WaitForBuffer(m_bStop, maxWaitTime); if (buffer < 0) { diff --git a/xbmc/cores/dvdplayer/DVDPlayerVideo.h b/xbmc/cores/dvdplayer/DVDPlayerVideo.h index 68e5210cbc..3e0d065ca2 100644 --- a/xbmc/cores/dvdplayer/DVDPlayerVideo.h +++ b/xbmc/cores/dvdplayer/DVDPlayerVideo.h @@ -74,7 +74,7 @@ public: void WaitForBuffers() { m_messageQueue.WaitUntilEmpty(); } bool AcceptsData() const { return !m_messageQueue.IsFull(); } bool HasData() const { return m_messageQueue.GetDataSize() > 0; } - int GetLevel() const; + int GetLevel() const { return m_messageQueue.GetLevel(); } bool IsInited() const { return m_messageQueue.IsInited(); } void SendMessage(CDVDMsg* pMsg, int priority = 0) { m_messageQueue.Put(pMsg, priority); } void FlushMessages() { m_messageQueue.Flush(); } diff --git a/xbmc/dbwrappers/mysqldataset.cpp b/xbmc/dbwrappers/mysqldataset.cpp index 53e6e4181e..f133dde0fe 100644 --- a/xbmc/dbwrappers/mysqldataset.cpp +++ b/xbmc/dbwrappers/mysqldataset.cpp @@ -277,7 +277,7 @@ int MysqlDatabase::copy(const char *backup_name) { if ( (ret=query_with_reconnect(sql)) != MYSQL_OK ) { mysql_free_result(res); - throw DbErrors("Can't copy schema for table '%s'\nError: %s", db.c_str(), ret); + throw DbErrors("Can't copy schema for table '%s'\nError: %d", row[0], ret); } // copy the table data @@ -380,7 +380,7 @@ int MysqlDatabase::drop_analytics(void) { if ( (ret=query_with_reconnect(sql)) != MYSQL_OK ) { mysql_free_result(res); - throw DbErrors("Can't create trigger '%s'\nError: %s", row[0], ret); + throw DbErrors("Can't create trigger '%s'\nError: %d", row[0], ret); } } mysql_free_result(res); diff --git a/xbmc/epg/GUIEPGGridContainer.cpp b/xbmc/epg/GUIEPGGridContainer.cpp index 5d28b97f0a..113948a4e1 100644 --- a/xbmc/epg/GUIEPGGridContainer.cpp +++ b/xbmc/epg/GUIEPGGridContainer.cpp @@ -44,8 +44,6 @@ using namespace EPG; #define BLOCKJUMP 4 // how many blocks are jumped with each analogue scroll action #define BLOCK_SCROLL_OFFSET 60 / MINSPERBLOCK // how many blocks are jumped if we are at left/right edge of grid -#define MAX_UPDATE_FREQUENCY 3000 // Do at maximum 1 grid data update in MAX_UPDATE_FREQUENCY milliseconds - CGUIEPGGridContainer::CGUIEPGGridContainer(int parentID, int controlID, float posX, float posY, float width, float height, int scrollTime, int preloadItems, int timeBlocks, int rulerUnit, const CTextureInfo& progressIndicatorTexture) @@ -158,8 +156,8 @@ CGUIEPGGridContainer::CGUIEPGGridContainer(const CGUIEPGGridContainer &other) m_channelScrollLastTime = other.m_channelScrollLastTime; m_channelScrollSpeed = other.m_channelScrollSpeed; m_channelScrollOffset = other.m_channelScrollOffset; - m_nextUpdateTimeout = other.m_nextUpdateTimeout; } + CGUIEPGGridContainer::~CGUIEPGGridContainer(void) { Reset(); @@ -803,7 +801,7 @@ bool CGUIEPGGridContainer::OnMessage(CGUIMessage& message) return true; case GUI_MSG_LABEL_BIND: - if (message.GetPointer() && m_nextUpdateTimeout.IsTimePast()) + if (message.GetPointer()) { CSingleLock lock(m_critSection); @@ -889,10 +887,7 @@ bool CGUIEPGGridContainer::OnMessage(CGUIMessage& message) { // Grid index got recreated. Do cursors and offsets still point to the same epg tag? if (prevSelectedEpgTag == GetSelectedEpgInfoTag()) - { - m_nextUpdateTimeout.Set(MAX_UPDATE_FREQUENCY); // TODO ksooo: Refactor to have only one return statement. return true; - } int newChannelCursor = GetChannel(prevSelectedEpgTag); if (newChannelCursor >= 0) @@ -901,10 +896,7 @@ bool CGUIEPGGridContainer::OnMessage(CGUIMessage& message) if (newBlockCursor >= 0) { if (newChannelCursor == m_channelCursor && newBlockCursor == m_blockCursor) - { - m_nextUpdateTimeout.Set(MAX_UPDATE_FREQUENCY); // TODO ksooo: Refactor to have only one return statement. return true; - } if (newBlockCursor > 0 && newBlockCursor != m_blockCursor) { @@ -919,10 +911,7 @@ bool CGUIEPGGridContainer::OnMessage(CGUIMessage& message) } if (newBlockCursor > 0) - { - m_nextUpdateTimeout.Set(MAX_UPDATE_FREQUENCY); // TODO ksooo: Refactor to have only one return statement. return true; - } } } } @@ -935,7 +924,6 @@ bool CGUIEPGGridContainer::OnMessage(CGUIMessage& message) SetInvalid(); GoToNow(); - m_nextUpdateTimeout.Set(MAX_UPDATE_FREQUENCY); // TODO ksooo: Refactor to have only one return statement. return true; } break; diff --git a/xbmc/epg/GUIEPGGridContainer.h b/xbmc/epg/GUIEPGGridContainer.h index 5ef003001f..7ad182456a 100644 --- a/xbmc/epg/GUIEPGGridContainer.h +++ b/xbmc/epg/GUIEPGGridContainer.h @@ -24,7 +24,6 @@ #include "guilib/GUIControl.h" #include "guilib/GUIListItemLayout.h" #include "guilib/IGUIContainer.h" -#include "threads/SystemClock.h" namespace EPG { @@ -229,7 +228,5 @@ namespace EPG float m_channelScrollOffset; CCriticalSection m_critSection; - - XbmcThreads::EndTime m_nextUpdateTimeout; }; } diff --git a/xbmc/filesystem/DirectoryFactory.cpp b/xbmc/filesystem/DirectoryFactory.cpp index 052ac09670..10d08ef990 100644 --- a/xbmc/filesystem/DirectoryFactory.cpp +++ b/xbmc/filesystem/DirectoryFactory.cpp @@ -167,6 +167,10 @@ IDirectory* CDirectoryFactory::Create(const CURL& url) #if defined(TARGET_ANDROID) if (url.IsProtocol("androidapp")) return new CAndroidAppDirectory(); #endif +#ifdef HAVE_LIBBLURAY + if (url.IsProtocol("bluray")) return new CBlurayDirectory(); +#endif + if (url.IsProtocol("resource")) return new CResourceDirectory(); bool networkAvailable = g_application.getNetwork().IsAvailable(true); // true to wait for the network (if possible) if (networkAvailable) @@ -204,10 +208,6 @@ IDirectory* CDirectoryFactory::Create(const CURL& url) #ifdef HAS_FILESYSTEM_NFS if (url.IsProtocol("nfs")) return new CNFSDirectory(); #endif -#ifdef HAVE_LIBBLURAY - if (url.IsProtocol("bluray")) return new CBlurayDirectory(); -#endif - if (url.IsProtocol("resource")) return new CResourceDirectory(); } CLog::Log(LOGWARNING, "%s - %sunsupported protocol(%s) in %s", __FUNCTION__, networkAvailable ? "" : "Network down or ", url.GetProtocol().c_str(), url.GetRedacted().c_str() ); diff --git a/xbmc/filesystem/FileFactory.cpp b/xbmc/filesystem/FileFactory.cpp index c34bd13d65..fcf66cad15 100644 --- a/xbmc/filesystem/FileFactory.cpp +++ b/xbmc/filesystem/FileFactory.cpp @@ -143,6 +143,11 @@ IFile* CFileFactory::CreateLoader(const CURL& url) #if defined(TARGET_ANDROID) else if (url.IsProtocol("androidapp")) return new CFileAndroidApp(); #endif + else if (url.IsProtocol("pipe")) return new CPipeFile(); +#ifdef HAVE_LIBBLURAY + else if (url.IsProtocol("bluray")) return new CBlurayFile(); +#endif + else if (url.IsProtocol("resource")) return new CResourceFile(); bool networkAvailable = g_application.getNetwork().IsAvailable(); if (networkAvailable) @@ -174,14 +179,9 @@ IFile* CFileFactory::CreateLoader(const CURL& url) #ifdef HAS_FILESYSTEM_NFS else if (url.IsProtocol("nfs")) return new CNFSFile(); #endif - else if (url.IsProtocol("pipe")) return new CPipeFile(); #ifdef HAS_UPNP else if (url.IsProtocol("upnp")) return new CUPnPFile(); #endif -#ifdef HAVE_LIBBLURAY - else if (url.IsProtocol("bluray")) return new CBlurayFile(); -#endif - else if (url.IsProtocol("resource")) return new CResourceFile(); } CLog::Log(LOGWARNING, "%s - %sunsupported protocol(%s) in %s", __FUNCTION__, networkAvailable ? "" : "Network down or ", url.GetProtocol().c_str(), url.GetRedacted().c_str()); diff --git a/xbmc/guilib/GUIButtonControl.cpp b/xbmc/guilib/GUIButtonControl.cpp index 996502b8f9..eb8c401bc5 100644 --- a/xbmc/guilib/GUIButtonControl.cpp +++ b/xbmc/guilib/GUIButtonControl.cpp @@ -256,6 +256,7 @@ bool CGUIButtonControl::UpdateColors() { bool changed = CGUIControl::UpdateColors(); changed |= m_label.UpdateColors(); + changed |= m_label2.UpdateColors(); changed |= m_imgFocus.SetDiffuseColor(m_diffuseColor); changed |= m_imgNoFocus.SetDiffuseColor(m_diffuseColor); diff --git a/xbmc/guilib/GUIPanelContainer.cpp b/xbmc/guilib/GUIPanelContainer.cpp index 6bb3f79e24..21fd4aaf12 100644 --- a/xbmc/guilib/GUIPanelContainer.cpp +++ b/xbmc/guilib/GUIPanelContainer.cpp @@ -54,8 +54,9 @@ void CGUIPanelContainer::Process(unsigned int currentTime, CDirtyRegionList &dir int cacheBefore, cacheAfter; GetCacheOffsets(cacheBefore, cacheAfter); - // Free memory not used on screen at the moment, do this first so there's more memory for the new items. - FreeMemory(CorrectOffset(offset - cacheBefore, 0), CorrectOffset(offset + cacheAfter + m_itemsPerPage + 1, 0)); + // Free memory not used on screen + if ((int)m_items.size() > m_itemsPerPage + cacheBefore + cacheAfter) + FreeMemory(CorrectOffset(offset - cacheBefore, 0), CorrectOffset(offset + m_itemsPerPage + 1 + cacheAfter, 0)); CPoint origin = CPoint(m_posX, m_posY) + m_renderOffset; float pos = (m_orientation == VERTICAL) ? origin.y : origin.x; @@ -107,9 +108,6 @@ void CGUIPanelContainer::Render() int cacheBefore, cacheAfter; GetCacheOffsets(cacheBefore, cacheAfter); - // Free memory not used on screen at the moment, do this first so there's more memory for the new items. - FreeMemory(CorrectOffset(offset - cacheBefore, 0), CorrectOffset(offset + cacheAfter + m_itemsPerPage + 1, 0)); - if (g_graphicsContext.SetClipRegion(m_posX, m_posY, m_width, m_height)) { CPoint origin = CPoint(m_posX, m_posY) + m_renderOffset; diff --git a/xbmc/guilib/GUISettingsSliderControl.cpp b/xbmc/guilib/GUISettingsSliderControl.cpp index 7efc8956b1..76672d78d5 100644 --- a/xbmc/guilib/GUISettingsSliderControl.cpp +++ b/xbmc/guilib/GUISettingsSliderControl.cpp @@ -136,6 +136,7 @@ bool CGUISettingsSliderControl::UpdateColors() bool changed = CGUISliderControl::UpdateColors(); changed |= m_buttonControl.SetColorDiffuse(m_diffuseColor); changed |= m_buttonControl.UpdateColors(); + changed |= m_label.UpdateColors(); return changed; } diff --git a/xbmc/guilib/GUISliderControl.cpp b/xbmc/guilib/GUISliderControl.cpp index a076f131b0..3ef9345a84 100644 --- a/xbmc/guilib/GUISliderControl.cpp +++ b/xbmc/guilib/GUISliderControl.cpp @@ -554,13 +554,19 @@ EVENT_RESULT CGUISliderControl::OnMouseEvent(const CPoint &point, const CMouseEv } else if (event.m_id == ACTION_MOUSE_WHEEL_UP) { - Move(10); - return EVENT_RESULT_HANDLED; + if (m_guiBackground.HitTest(point)) + { + Move(10); + return EVENT_RESULT_HANDLED; + } } else if (event.m_id == ACTION_MOUSE_WHEEL_DOWN) { - Move(-10); - return EVENT_RESULT_HANDLED; + if (m_guiBackground.HitTest(point)) + { + Move(-10); + return EVENT_RESULT_HANDLED; + } } else if (event.m_id == ACTION_GESTURE_NOTIFY) { diff --git a/xbmc/guilib/GUISpinControl.cpp b/xbmc/guilib/GUISpinControl.cpp index 57a9f6f135..78e320ae04 100644 --- a/xbmc/guilib/GUISpinControl.cpp +++ b/xbmc/guilib/GUISpinControl.cpp @@ -948,13 +948,19 @@ EVENT_RESULT CGUISpinControl::OnMouseEvent(const CPoint &point, const CMouseEven } else if (event.m_id == ACTION_MOUSE_WHEEL_UP) { - MoveUp(); - return EVENT_RESULT_HANDLED; + if (m_imgspinUpFocus.HitTest(point) || m_imgspinDownFocus.HitTest(point)) + { + MoveUp(); + return EVENT_RESULT_HANDLED; + } } else if (event.m_id == ACTION_MOUSE_WHEEL_DOWN) { - MoveDown(); - return EVENT_RESULT_HANDLED; + if (m_imgspinUpFocus.HitTest(point) || m_imgspinDownFocus.HitTest(point)) + { + MoveDown(); + return EVENT_RESULT_HANDLED; + } } return EVENT_RESULT_UNHANDLED; } diff --git a/xbmc/guilib/GUITextBox.cpp b/xbmc/guilib/GUITextBox.cpp index dd783779a3..2cdbf1cba1 100644 --- a/xbmc/guilib/GUITextBox.cpp +++ b/xbmc/guilib/GUITextBox.cpp @@ -239,7 +239,11 @@ void CGUITextBox::Render() { m_font->Begin(); int current = offset; - m_colors.push_back(m_textColor); + + // set the main text color + if (m_colors.size()) + m_colors[0] = m_label.textColor; + while (posY < m_posY + m_renderHeight && current < (int)m_lines.size()) { uint32_t align = alignment; diff --git a/xbmc/guilib/GUIWindow.cpp b/xbmc/guilib/GUIWindow.cpp index a700ebe83b..562c9498cf 100644 --- a/xbmc/guilib/GUIWindow.cpp +++ b/xbmc/guilib/GUIWindow.cpp @@ -656,7 +656,8 @@ bool CGUIWindow::OnMessage(CGUIMessage& message) { CAction action(ACTION_GESTURE_NOTIFY, 0, (float)message.GetParam1(), (float)message.GetParam2(), 0, 0); EVENT_RESULT result = OnMouseAction(action); - message.SetParam1(result); + auto res = new int(result); + message.SetPointer(static_cast<void*>(res)); return result != EVENT_RESULT_UNHANDLED; } case GUI_MSG_ADD_CONTROL: diff --git a/xbmc/guilib/GUIWindowManager.cpp b/xbmc/guilib/GUIWindowManager.cpp index 6030c4c69d..aa6713d897 100644 --- a/xbmc/guilib/GUIWindowManager.cpp +++ b/xbmc/guilib/GUIWindowManager.cpp @@ -67,6 +67,7 @@ #include "windows/GUIWindowScreensaver.h" #include "windows/GUIWindowScreensaverDim.h" #include "pictures/GUIWindowSlideShow.h" +#include "windows/GUIWindowSplash.h" #include "windows/GUIWindowStartup.h" #include "video/windows/GUIWindowFullScreen.h" #include "video/dialogs/GUIDialogVideoOSD.h" @@ -164,6 +165,7 @@ CGUIWindowManager::~CGUIWindowManager(void) void CGUIWindowManager::Initialize() { m_tracker.SelectAlgorithm(); + m_initialized = true; LoadNotOnDemandWindows(); @@ -291,12 +293,14 @@ void CGUIWindowManager::CreateWindows() Add(new CGUIWindowScreensaver); Add(new CGUIWindowWeather); Add(new CGUIWindowStartup); + Add(new CGUIWindowSplash); } bool CGUIWindowManager::DestroyWindows() { try { + Delete(WINDOW_SPLASH); Delete(WINDOW_MUSIC_PLAYLIST); Delete(WINDOW_MUSIC_PLAYLIST_EDITOR); Delete(WINDOW_MUSIC_FILES); diff --git a/xbmc/guilib/WindowIDs.h b/xbmc/guilib/WindowIDs.h index 2548e2b32b..145496ec7c 100644 --- a/xbmc/guilib/WindowIDs.h +++ b/xbmc/guilib/WindowIDs.h @@ -157,6 +157,7 @@ #define WINDOW_DIALOG_VIDEO_OVERLAY 12904 #define WINDOW_VIDEO_TIME_SEEK 12905 // virtual window for time seeking during fullscreen video +#define WINDOW_SPLASH 12997 // splash window #define WINDOW_START 12998 // first window to load #define WINDOW_STARTUP_ANIM 12999 // for startup animations diff --git a/xbmc/input/touch/generic/GenericTouchActionHandler.cpp b/xbmc/input/touch/generic/GenericTouchActionHandler.cpp index fc8599c9da..ebd538d302 100644 --- a/xbmc/input/touch/generic/GenericTouchActionHandler.cpp +++ b/xbmc/input/touch/generic/GenericTouchActionHandler.cpp @@ -148,7 +148,15 @@ int CGenericTouchActionHandler::QuerySupportedGestures(float x, float y) if (!g_windowManager.SendMessage(msg)) return 0; - return msg.GetParam1(); + int result = 0; + if (msg.GetPointer()) + { + int *p = static_cast<int*>(msg.GetPointer()); + msg.SetPointer(nullptr); + result = *p; + delete p; + } + return result; } void CGenericTouchActionHandler::touch(uint8_t type, uint8_t button, uint16_t x, uint16_t y) diff --git a/xbmc/interfaces/legacy/Addon.h b/xbmc/interfaces/legacy/Addon.h index 58c181394d..f1f692134b 100644 --- a/xbmc/interfaces/legacy/Addon.h +++ b/xbmc/interfaces/legacy/Addon.h @@ -104,7 +104,7 @@ namespace XBMCAddon * *Note, You can use the above as keywords for arguments. * * example: - * - self.Settings.setSetting(id='username', value='teamxbmc')\n + * - self.Addon.setSetting(id='username', value='teamxbmc')\n */ void setSetting(const char* id, const String& value); @@ -112,7 +112,7 @@ namespace XBMCAddon * openSettings() -- Opens this scripts settings dialog. * * example: - * - self.Settings.openSettings() + * - self.Addon.openSettings() */ void openSettings(); diff --git a/xbmc/interfaces/legacy/Control.h b/xbmc/interfaces/legacy/Control.h index cadfb78bb3..10430eb5f2 100644 --- a/xbmc/interfaces/legacy/Control.h +++ b/xbmc/interfaces/legacy/Control.h @@ -126,7 +126,7 @@ namespace XBMCAddon // setVisibleCondition() Method /** * setVisibleCondition(visible[,allowHiddenFocus]) -- Set's the control's visible condition. - * Allows XBMC to control the visible status of the control. + * Allows Kodi to control the visible status of the control. * * visible : string - Visible condition.\n * allowHiddenFocus : bool - True=gains focus even if hidden. @@ -141,7 +141,7 @@ namespace XBMCAddon // setEnableCondition() Method /** * setEnableCondition(enable) -- Set's the control's enabled condition. - * Allows XBMC to control the enabled status of the control. + * Allows Kodi to control the enabled status of the control. * * enable : string - Enable condition. * diff --git a/xbmc/interfaces/legacy/Dialog.h b/xbmc/interfaces/legacy/Dialog.h index 5cc7c3ee1a..9fc9694273 100644 --- a/xbmc/interfaces/legacy/Dialog.h +++ b/xbmc/interfaces/legacy/Dialog.h @@ -56,7 +56,7 @@ namespace XBMCAddon * yesno(heading, line1[, line2, line3]) -- Show a dialog 'YES/NO'.\n * \n * heading : string or unicode - dialog heading.\n - * line1 : string or unicode - line #1 text.\n + * line1 : string or unicode - line #1 multi-line text.\n * line2 : [opt] string or unicode - line #2 text.\n * line3 : [opt] string or unicode - line #3 text.\n * nolabel : [opt] label to put on the no button.\n @@ -64,11 +64,11 @@ namespace XBMCAddon * autoclose : [opt] integer - milliseconds to autoclose dialog. (default=do not autoclose)\n * \n * *Note, Returns True if 'Yes' was pressed, else False.\n - * *Note, Optionally line1 can be sent as multi-line text. In this case line2 and line3 must be omitted.\n + * *Note, it is preferred to only use line1 as it is actually a multi-line text. In this case line2 and line3 must be omitted.\n * \n * example:\n * - dialog = xbmcgui.Dialog()\n - * - ret = dialog.yesno('XBMC', 'Do you want to exit this script?')n\n + * - ret = dialog.yesno('Kodi', 'Do you want to exit this script?')n\n */ bool yesno(const String& heading, const String& line1, const String& line2 = emptyString, @@ -96,12 +96,12 @@ namespace XBMCAddon * ok(heading, line1[, line2, line3]) -- Show a dialog 'OK'.\n * \n * heading : string or unicode - dialog heading.\n - * line1 : string or unicode - line #1 text.\n + * line1 : string or unicode - line #1 multi-line text.\n * line2 : [opt] string or unicode - line #2 text.\n * line3 : [opt] string or unicode - line #3 text.\n * \n * *Note, Returns True if 'Ok' was pressed, else False.\n - * *Note: Optionally line1 can be sent as multi-line text. In this case line2 and line3 must be omitted.\n + * *Note, it is preferred to only use line1 as it is actually a multi-line text. In this case line2 and line3 must be omitted.\n * \n * example:\n * - dialog = xbmcgui.Dialog()\n @@ -306,11 +306,11 @@ namespace XBMCAddon * create(heading[, line1, line2, line3]) -- Create and show a progress dialog.\n * \n * heading : string or unicode - dialog heading.\n - * line1 : [opt] string or unicode - line #1 text.\n + * line1 : [opt] string or unicode - line #1 multi-line text.\n * line2 : [opt] string or unicode - line #2 text.\n * line3 : [opt] string or unicode - line #3 text.\n * \n - * *Note, Optionally line1 can be sent as multi-line text. In this case line2 and line3 must be omitted.\n + * *Note, it is preferred to only use line1 as it is actually a multi-line text. In this case line2 and line3 must be omitted.\n * *Note, Use update() to update lines and progressbar.\n * \n * example: @@ -325,11 +325,11 @@ namespace XBMCAddon * update(percent[, line1, line2, line3]) -- Updates the progress dialog.\n * \n * percent : integer - percent complete. (0:100)\n - * line1 : [opt] string or unicode - line #1 text.\n + * line1 : [opt] string or unicode - line #1 multi-line text.\n * line2 : [opt] string or unicode - line #2 text.\n * line3 : [opt] string or unicode - line #3 text.\n * \n - * *Note, Optionally line1 can be sent as multi-line text. In this case line2 and line3 must be omitted.\n + * *Note, it is preferred to only use line1 as it is actually a multi-line text. In this case line2 and line3 must be omitted.\n * *Note, If percent == 0, the progressbar will be hidden.\n * \n * example: diff --git a/xbmc/interfaces/legacy/ListItem.h b/xbmc/interfaces/legacy/ListItem.h index a9333004a5..c841068f07 100644 --- a/xbmc/interfaces/legacy/ListItem.h +++ b/xbmc/interfaces/legacy/ListItem.h @@ -199,8 +199,8 @@ namespace XBMCAddon * - watched : depreciated - use playcount instead * - playcount : integer (2) - number of times this item has been played * - overlay : integer (2) - range is 0..8. See GUIListItem.h for values - * - cast : list (Michal C. Hall) - * - castandrole : list (Michael C. Hall|Dexter) + * - cast : list (["Michal C. Hall","Jennifer Carpenter"]) - if provided a list of tuples cast will be interpreted as castandrole + * - castandrole : list of tuples ([("Michael C. Hall","Dexter"),("Jennifer Carpenter","Debra")]) * - director : string (Dagur Kari) * - mpaa : string (PG-13) * - plot : string (Long Description) @@ -243,7 +243,7 @@ namespace XBMCAddon * - exif* : string (See CPictureInfoTag::TranslateString in PictureInfoTag.cpp for valid strings) * * example:\n - * - self.list.getSelectedItem().setInfo('video', { 'Genre': 'Comedy' })n\n + * - self.list.getSelectedItem().setInfo('video', { 'genre': 'Comedy' })n\n */ void setInfo(const char* type, const InfoLabelDict& infoLabels); @@ -267,7 +267,7 @@ namespace XBMCAddon * - language : string (en) * * example: - * - self.list.getSelectedItem().addStreamInfo('video', { 'Codec': 'h264', 'Width' : 1280 }) + * - self.list.getSelectedItem().addStreamInfo('video', { 'codec': 'h264', 'width' : 1280 }) */ void addStreamInfo(const char* cType, const Properties& dictionary); @@ -340,7 +340,7 @@ namespace XBMCAddon * \n * mimetype : string or unicode - mimetype.\n * \n - * *If known prehand, this can avoid xbmc doing HEAD requests to http servers to figure out file type.\n + * *If known prehand, this can avoid Kodi doing HEAD requests to http servers to figure out file type.\n */ void setMimeType(const String& mimetype); diff --git a/xbmc/interfaces/legacy/ModuleXbmc.h b/xbmc/interfaces/legacy/ModuleXbmc.h index cde3dd49b3..9817525b5d 100644 --- a/xbmc/interfaces/legacy/ModuleXbmc.h +++ b/xbmc/interfaces/legacy/ModuleXbmc.h @@ -44,9 +44,9 @@ namespace XBMCAddon * Once you use a keyword, all following arguments require the keyword.\n * \n * Text is written to the log for the following conditions.\n - * XBMC loglevel == -1 (NONE, nothing at all is logged)\n - * XBMC loglevel == 0 (NORMAL, shows LOGNOTICE, LOGERROR, LOGSEVERE and LOGFATAL)\n - * XBMC loglevel == 1 (DEBUG, shows all)\n + * - loglevel == -1 (NONE, nothing at all is logged) + * - loglevel == 0 (NORMAL, shows LOGNOTICE, LOGERROR, LOGSEVERE and LOGFATAL) + * - loglevel == 1 (DEBUG, shows all) * See pydocs for valid values for level.\n * * example: @@ -80,7 +80,7 @@ namespace XBMCAddon void executescript(const char* script); /** - * executebuiltin(function) -- Execute a built in XBMC function. + * executebuiltin(function) -- Execute a built in Kodi function. * * function : string - builtin function to execute. * diff --git a/xbmc/interfaces/legacy/ModuleXbmcplugin.h b/xbmc/interfaces/legacy/ModuleXbmcplugin.h index f89e2205ab..d610677e48 100644 --- a/xbmc/interfaces/legacy/ModuleXbmcplugin.h +++ b/xbmc/interfaces/legacy/ModuleXbmcplugin.h @@ -47,7 +47,7 @@ namespace XBMCAddon bool isFolder = false, int totalItems = 0); /** - * addDirectoryItems(handle, items [,totalItems]) -- Callback function to pass directory contents back to XBMC as a list. + * addDirectoryItems(handle, items [,totalItems]) -- Callback function to pass directory contents back to Kodi as a list. * - Returns a bool for successful completion. * * handle : integer - handle the plugin was started with.\n @@ -65,7 +65,7 @@ namespace XBMCAddon int totalItems = 0); /** - * endOfDirectory(handle[, succeeded, updateListing, cacheToDisc]) -- Callback function to tell XBMC that the end of the directory listing in a virtualPythonFolder module is reached. + * endOfDirectory(handle[, succeeded, updateListing, cacheToDisc]) -- Callback function to tell Kodi that the end of the directory listing in a virtualPythonFolder module is reached. * * handle : integer - handle the plugin was started with.\n * succeeded : [opt] bool - True=script completed successfully(Default)/False=Script did not.\n @@ -79,7 +79,7 @@ namespace XBMCAddon bool cacheToDisc = true); /** - * setResolvedUrl(handle, succeeded, listitem) -- Callback function to tell XBMC that the file plugin has been resolved to a url + * setResolvedUrl(handle, succeeded, listitem) -- Callback function to tell Kodi that the file plugin has been resolved to a url * * handle : integer - handle the plugin was started with.\n * succeeded : bool - True=script completed successfully/False=Script did not.\n @@ -91,10 +91,10 @@ namespace XBMCAddon void setResolvedUrl(int handle, bool succeeded, const XBMCAddon::xbmcgui::ListItem* listitem); /** - * addSortMethod(handle, sortMethod, label2Mask) -- Adds a sorting method for the media list. + * addSortMethod(handle, sortMethod [,label2Mask]) -- Adds a sorting method for the media list. * * handle : integer - handle the plugin was started with.\n - * sortMethod : integer - number for sortmethod see SortFileItem.h.\n + * sortMethod : integer - see available sort methods at the bottom (or see SortFileItem.h).\n * label2Mask : [opt] string - the label mask to use for the second label. Defaults to '%D' * - applies to: * - SORT_METHOD_NONE, SORT_METHOD_UNSORTED, SORT_METHOD_VIDEO_TITLE, @@ -103,9 +103,10 @@ namespace XBMCAddon * - SORT_METHOD_LABEL_IGNORE_THE, SORT_METHOD_VIDEO_SORT_TITLE, * - SORT_METHOD_VIDEO_SORT_TITLE_IGNORE_THE, SORT_METHOD_FULLPATH, * - SORT_METHOD_LABEL_IGNORE_FOLDERS, SORT_METHOD_CHANNEL - * + * *Note: to add multiple sort methods just call the method multiple times. + * * example: - * - xbmcplugin.addSortMethod(int(sys.argv[1]), 1) + * - xbmcplugin.addSortMethod(int(sys.argv[1]), xbmcplugin.SORTMETHOD_DATEADDED) */ void addSortMethod(int handle, int sortMethod, const String& label2Mask = emptyString); diff --git a/xbmc/interfaces/legacy/Monitor.h b/xbmc/interfaces/legacy/Monitor.h index fa94c494ca..7312fbd91c 100644 --- a/xbmc/interfaces/legacy/Monitor.h +++ b/xbmc/interfaces/legacy/Monitor.h @@ -159,7 +159,7 @@ namespace XBMCAddon * method : name of the notification\n * data : JSON-encoded data of the notification\n *\n - * Will be called when XBMC receives or sends a notification\n + * Will be called when Kodi receives or sends a notification\n */ virtual void onNotification(const String sender, const String method, const String data) { XBMC_TRACE; } diff --git a/xbmc/interfaces/legacy/Player.h b/xbmc/interfaces/legacy/Player.h index 1908f51acf..551d7e395c 100644 --- a/xbmc/interfaces/legacy/Player.h +++ b/xbmc/interfaces/legacy/Player.h @@ -124,7 +124,7 @@ namespace XBMCAddon /** * onPlayBackStarted() -- onPlayBackStarted method. * - * Will be called when xbmc starts playing a file + * Will be called when Kodi starts playing a file */ // Player_OnPlayBackStarted virtual void onPlayBackStarted(); @@ -133,7 +133,7 @@ namespace XBMCAddon /** * onPlayBackEnded() -- onPlayBackEnded method. * - * Will be called when xbmc stops playing a file + * Will be called when Kodi stops playing a file */ // Player_OnPlayBackEnded virtual void onPlayBackEnded(); @@ -141,7 +141,7 @@ namespace XBMCAddon /** * onPlayBackStopped() -- onPlayBackStopped method. * - * Will be called when user stops xbmc playing a file + * Will be called when user stops Kodi playing a file */ // Player_OnPlayBackStopped virtual void onPlayBackStopped(); @@ -200,19 +200,19 @@ namespace XBMCAddon virtual void onPlayBackSeekChapter(int chapter); /** - * isPlaying() -- returns True is xbmc is playing a file. + * isPlaying() -- returns True is Kodi is playing a file. */ // Player_IsPlaying bool isPlaying(); /** - * isPlayingAudio() -- returns True is xbmc is playing an audio file. + * isPlayingAudio() -- returns True is Kodi is playing an audio file. */ // Player_IsPlayingAudio bool isPlayingAudio(); /** - * isPlayingVideo() -- returns True if xbmc is playing a video. + * isPlayingVideo() -- returns True if Kodi is playing a video. */ // Player_IsPlayingVideo bool isPlayingVideo(); diff --git a/xbmc/interfaces/legacy/WindowXML.h b/xbmc/interfaces/legacy/WindowXML.h index fb65314103..e166189a4c 100644 --- a/xbmc/interfaces/legacy/WindowXML.h +++ b/xbmc/interfaces/legacy/WindowXML.h @@ -40,14 +40,14 @@ namespace XBMCAddon * WindowXML(self, xmlFilename, scriptPath[, defaultSkin, defaultRes]) -- Create a new WindowXML script. * * xmlFilename : string - the name of the xml file to look for.\n - * scriptPath : string - path to script. used to fallback to if the xml doesn't exist in the current skin. (eg os.getcwd())\n + * scriptPath : string - path to script. used to fallback to if the xml doesn't exist in the current skin. (eg xbmcaddon.Addon().getAddonInfo('path').decode('utf-8'))\n * defaultSkin : [opt] string - name of the folder in the skins path to look in for the xml. (default='Default')\n * defaultRes : [opt] string - default skins resolution. (default='720p') * * *Note, skin folder structure is eg(resources/skins/Default/720p) * * example:\n - * - ui = GUI('script-Lyrics-main.xml', os.getcwd(), 'LCARS', 'PAL')\n + * - ui = GUI('script-Lyrics-main.xml', xbmcaddon.Addon().getAddonInfo('path').decode('utf-8'), 'default', '1080p')\n * ui.doModal()\n * del ui */ @@ -209,14 +209,14 @@ namespace XBMCAddon * WindowXMLDialog(self, xmlFilename, scriptPath[, defaultSkin, defaultRes]) -- Create a new WindowXMLDialog script. * * xmlFilename : string - the name of the xml file to look for.\n - * scriptPath : string - path to script. used to fallback to if the xml doesn't exist in the current skin. (eg os.getcwd())\n + * scriptPath : string - path to script. used to fallback to if the xml doesn't exist in the current skin. (eg xbmcaddon.Addon().getAddonInfo('path').decode('utf-8'))\n * defaultSkin : [opt] string - name of the folder in the skins path to look in for the xml. (default='Default')\n * defaultRes : [opt] string - default skins resolution. (default='720p') * * *Note, skin folder structure is eg(resources/skins/Default/720p) * * example: - * - ui = GUI('script-Lyrics-main.xml', os.getcwd(), 'LCARS', 'PAL') + * - ui = GUI('script-Lyrics-main.xml', xbmcaddon.Addon().getAddonInfo('path').decode('utf-8'), 'default', '1080p') * - ui.doModal() * - del ui */ diff --git a/xbmc/messaging/Makefile b/xbmc/messaging/Makefile new file mode 100644 index 0000000000..976e0b887e --- /dev/null +++ b/xbmc/messaging/Makefile @@ -0,0 +1,7 @@ +SRCS = ApplicationMessenger.cpp + +LIB = messaging.a + +include /Users/haggi/Home/devs/workspace/xbmc/Makefile.include +-include $(patsubst %.cpp,%.P,$(patsubst %c,%.P,$(patsubst %.S,,$(SRCS)))) + diff --git a/xbmc/music/MusicInfoLoader.cpp b/xbmc/music/MusicInfoLoader.cpp index 8de9c4cf1b..a3fef98931 100644 --- a/xbmc/music/MusicInfoLoader.cpp +++ b/xbmc/music/MusicInfoLoader.cpp @@ -107,14 +107,15 @@ bool CMusicInfoLoader::LoadAdditionalTagInfo(CFileItem* pItem) CLog::Log(LOGDEBUG, "Loading additional tag info for file %s", path.c_str()); - // we load up the actual tag for this file - unique_ptr<IMusicInfoTagLoader> pLoader (CMusicInfoTagLoaderFactory::CreateLoader(*pItem)); + // we load up the actual tag for this file in order to + // fetch the lyrics and add it to the current music info tag + CFileItem tempItem(path, false); + unique_ptr<IMusicInfoTagLoader> pLoader (CMusicInfoTagLoaderFactory::CreateLoader(tempItem)); if (NULL != pLoader.get()) { CMusicInfoTag tag; pLoader->Load(path, tag); - // then we set the fields from the file tags to the item - pItem->SetProperty("lyrics", tag.GetLyrics()); + pItem->GetMusicInfoTag()->SetLyrics(tag.GetLyrics()); pItem->SetProperty("hasfullmusictag", "true"); return true; } diff --git a/xbmc/osx/ios/IOSKeyboardView.mm b/xbmc/osx/ios/IOSKeyboardView.mm index 7b730e62c4..492f2a61c3 100644 --- a/xbmc/osx/ios/IOSKeyboardView.mm +++ b/xbmc/osx/ios/IOSKeyboardView.mm @@ -93,6 +93,10 @@ static CEvent keyboardFinishedEvent; name:UIKeyboardDidHideNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(keyboardDidChangeFrame:) + name:UIKeyboardDidChangeFrameNotification + object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; @@ -176,6 +180,34 @@ static CEvent keyboardFinishedEvent; return YES; } +- (void)keyboardDidChangeFrame:(id)sender +{ +#if __IPHONE_8_0 + // when compiled against ios 8.x sdk and runtime is ios + // 5.1.1 (f.e. ipad1 which has 5.1.1 as latest available ios version) + // there is an incompatibility which somehowe prevents us from getting + // notified about "keyboardDidHide". This makes the keyboard + // useless on those ios platforms. + // Instead we are called here with "DidChangeFrame" and + // and an invalid frame set (height, width == 0 and pos is inf). + // Lets detect this situation and treat this as "keyboard was hidden" + // message + if (CDarwinUtils::GetIOSVersion() < 6.0) + { + PRINT_SIGNATURE(); + + NSDictionary* info = [sender userInfo]; + CGRect kbRect = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; +// LOG(@"keyboardWillShow: keyboard frame: %f %f %f %f", kbRect.origin.x, kbRect.origin.y, kbRect.size.width, kbRect.size.height); + if (kbRect.size.height == 0) + { + LOG(@"keyboardDidChangeFrame: working around missing keyboardDidHide Message on iOS 5.x"); + [self keyboardDidHide:sender]; + } + } +#endif +} + - (void)keyboardDidHide:(id)sender { PRINT_SIGNATURE(); diff --git a/xbmc/powermanagement/PowerManager.cpp b/xbmc/powermanagement/PowerManager.cpp index 6754f424de..53a5217d81 100644 --- a/xbmc/powermanagement/PowerManager.cpp +++ b/xbmc/powermanagement/PowerManager.cpp @@ -35,6 +35,7 @@ #include "guilib/GUIWindowManager.h" #include "dialogs/GUIDialogBusy.h" #include "dialogs/GUIDialogKaiToast.h" +#include "pvr/PVRManager.h" #if defined(TARGET_DARWIN) #include "osx/CocoaPowerSyscall.h" @@ -180,31 +181,14 @@ bool CPowerManager::Powerdown() bool CPowerManager::Suspend() { - if (CanSuspend() && m_instance->Suspend()) - { - CGUIDialogBusy* dialog = (CGUIDialogBusy*)g_windowManager.GetWindow(WINDOW_DIALOG_BUSY); - if (dialog) - dialog->Show(); - - return true; - } - - return false; + return (CanSuspend() && m_instance->Suspend()); } bool CPowerManager::Hibernate() { - if (CanHibernate() && m_instance->Hibernate()) - { - CGUIDialogBusy* dialog = (CGUIDialogBusy*)g_windowManager.GetWindow(WINDOW_DIALOG_BUSY); - if (dialog) - dialog->Show(); - - return true; - } - - return false; + return (CanHibernate() && m_instance->Hibernate()); } + bool CPowerManager::Reboot() { bool success = CanReboot() ? m_instance->Reboot() : false; @@ -254,6 +238,11 @@ void CPowerManager::ProcessEvents() void CPowerManager::OnSleep() { CAnnouncementManager::Get().Announce(System, "xbmc", "OnSleep"); + + CGUIDialogBusy* dialog = (CGUIDialogBusy*)g_windowManager.GetWindow(WINDOW_DIALOG_BUSY); + if (dialog) + dialog->Show(); + CLog::Log(LOGNOTICE, "%s: Running sleep jobs", __FUNCTION__); // stop lirc @@ -262,6 +251,7 @@ void CPowerManager::OnSleep() CBuiltins::Execute("LIRC.Stop"); #endif + PVR::CPVRManager::Get().SetWakeupCommand(); g_application.SaveFileState(true); g_application.StopPlaying(); g_application.StopShutdownTimer(); diff --git a/xbmc/powermanagement/windows/Win32PowerSyscall.cpp b/xbmc/powermanagement/windows/Win32PowerSyscall.cpp index 09787ca06c..cbc9842b2d 100644 --- a/xbmc/powermanagement/windows/Win32PowerSyscall.cpp +++ b/xbmc/powermanagement/windows/Win32PowerSyscall.cpp @@ -26,34 +26,59 @@ bool CWin32PowerSyscall::m_OnResume = false; bool CWin32PowerSyscall::m_OnSuspend = false; +bool CWin32PowerStateWorker::QueryStateChange(PowerState state) +{ + if (!IsRunning()) + return false; + + if (m_state.exchange(state) != state) + { + m_queryEvent.Set(); + return true; + } + + return false; +} + +void CWin32PowerStateWorker::Process(void) +{ + while (!m_bStop) + { + if (AbortableWait(m_queryEvent, -1) == WAIT_SIGNALED) + { + CWIN32Util::PowerManagement(m_state.load()); + m_state.exchange(POWERSTATE_NONE); + m_queryEvent.Reset(); + } + } +} CWin32PowerSyscall::CWin32PowerSyscall() { + m_worker.Create(); +} + +CWin32PowerSyscall::~CWin32PowerSyscall() +{ + if (m_worker.IsRunning()) + m_worker.StopThread(); } bool CWin32PowerSyscall::Powerdown() { - return CWIN32Util::PowerManagement(POWERSTATE_SHUTDOWN); + return m_worker.QueryStateChange(POWERSTATE_SHUTDOWN); } bool CWin32PowerSyscall::Suspend() { - // On Vista+, we don't receive the PBT_APMSUSPEND message as we have fired the suspend mode - // Set the flag manually - CWin32PowerSyscall::SetOnSuspend(); - - return CWIN32Util::PowerManagement(POWERSTATE_SUSPEND); + return m_worker.QueryStateChange(POWERSTATE_SUSPEND); } bool CWin32PowerSyscall::Hibernate() { - // On Vista+, we don't receive the PBT_APMSUSPEND message as we have fired the suspend mode - // Set the flag manually - CWin32PowerSyscall::SetOnSuspend(); - - return CWIN32Util::PowerManagement(POWERSTATE_HIBERNATE); + return m_worker.QueryStateChange(POWERSTATE_HIBERNATE); } bool CWin32PowerSyscall::Reboot() { - return CWIN32Util::PowerManagement(POWERSTATE_REBOOT); + return m_worker.QueryStateChange(POWERSTATE_REBOOT); } bool CWin32PowerSyscall::CanPowerdown() diff --git a/xbmc/powermanagement/windows/Win32PowerSyscall.h b/xbmc/powermanagement/windows/Win32PowerSyscall.h index 95d4027c34..f2f0dd7afb 100644 --- a/xbmc/powermanagement/windows/Win32PowerSyscall.h +++ b/xbmc/powermanagement/windows/Win32PowerSyscall.h @@ -24,11 +24,31 @@ #ifndef _WIN32_POWER_SYSCALL_H_ #define _WIN32_POWER_SYSCALL_H_ #include "powermanagement/IPowerSyscall.h" +#include "powermanagement/PowerManager.h" +#include "threads/Event.h" +#include "threads/Thread.h" +#include <atomic> + +class CWin32PowerStateWorker : public CThread +{ +public: + CWin32PowerStateWorker() : CThread("CWin32PowerStateWorker"), m_queryEvent(true), m_state(POWERSTATE_NONE) {} + bool QueryStateChange(PowerState State); + +protected: + virtual void Process(void); + virtual void OnStartup() { SetPriority(THREAD_PRIORITY_IDLE); }; + +private: + std::atomic<PowerState> m_state; + CEvent m_queryEvent; +}; class CWin32PowerSyscall : public CAbstractPowerSyscall { public: CWin32PowerSyscall(); + ~CWin32PowerSyscall(); virtual bool Powerdown(); virtual bool Suspend(); @@ -48,6 +68,7 @@ public: static bool IsSuspending() { return m_OnSuspend; } private: + CWin32PowerStateWorker m_worker; static bool m_OnResume; static bool m_OnSuspend; diff --git a/xbmc/pvr/PVRActionListener.cpp b/xbmc/pvr/PVRActionListener.cpp index fbd6a9ae34..e303a768e9 100644 --- a/xbmc/pvr/PVRActionListener.cpp +++ b/xbmc/pvr/PVRActionListener.cpp @@ -24,6 +24,7 @@ #include "ApplicationMessenger.h" #include "input/Key.h" #include "guilib/LocalizeStrings.h" +#include "guilib/GUIWindowManager.h" #include "dialogs/GUIDialogNumeric.h" #include "settings/AdvancedSettings.h" #include "settings/Settings.h" @@ -84,7 +85,9 @@ bool CPVRActionListener::OnAction(const CAction &action) case REMOTE_8: case REMOTE_9: { - if (g_application.IsFullScreen() && g_application.CurrentFileItem().IsLiveTV()) + if (g_application.CurrentFileItem().IsLiveTV() && + (g_windowManager.IsWindowActive(WINDOW_FULLSCREEN_VIDEO) || + g_windowManager.IsWindowActive(WINDOW_VISUALISATION))) { if(g_PVRManager.IsPlaying()) { diff --git a/xbmc/pvr/PVRGUIInfo.cpp b/xbmc/pvr/PVRGUIInfo.cpp index 627fa7788b..d64b598d7e 100644 --- a/xbmc/pvr/PVRGUIInfo.cpp +++ b/xbmc/pvr/PVRGUIInfo.cpp @@ -681,7 +681,14 @@ void CPVRGUIInfo::UpdateBackendCache(void) // Update the backend information for all backends once per iteration if (m_iCurrentActiveClient == 0) - m_backendProperties = g_PVRClients->GetBackendProperties(); + { + std::vector<SBackend> backendProperties; + { + CSingleExit exit(m_critSection); + backendProperties = g_PVRClients->GetBackendProperties(); + } + m_backendProperties = backendProperties; + } // Get the properties for the currently active backend const auto &backend = GetCurrentActiveBackend(); diff --git a/xbmc/pvr/PVRManager.cpp b/xbmc/pvr/PVRManager.cpp index eb40585a02..19fadb26f4 100644 --- a/xbmc/pvr/PVRManager.cpp +++ b/xbmc/pvr/PVRManager.cpp @@ -92,8 +92,7 @@ CPVRManager::CPVRManager(void) : m_bFirstStart(true), m_bEpgsCreated(false), m_progressHandle(NULL), - m_managerState(ManagerStateStopped), - m_openWindowId(0) + m_managerState(ManagerStateStopped) { CAnnouncementManager::Get().AddAnnouncer(this); ResetProperties(); @@ -355,7 +354,6 @@ void CPVRManager::Cleanup(void) m_currentFile = NULL; m_bIsSwitchingChannels = false; m_outdatedAddons.clear(); - m_openWindowId = 0; m_bEpgsCreated = false; for (unsigned int iJobPtr = 0; iJobPtr < m_pendingUpdates.size(); iJobPtr++) @@ -389,24 +387,23 @@ void CPVRManager::ResetProperties(void) class CPVRManagerStartJob : public CJob { public: - CPVRManagerStartJob(int openWindowId = 0) : - m_openWindowId(openWindowId) {} + CPVRManagerStartJob() {} ~CPVRManagerStartJob(void) {} bool DoWork(void) { - g_PVRManager.Start(false, m_openWindowId); + g_PVRManager.Start(false); return true; } private: int m_openWindowId; }; -void CPVRManager::Start(bool bAsync /* = false */, int openWindowId /* = 0 */) +void CPVRManager::Start(bool bAsync /* = false */) { if (bAsync) { - CPVRManagerStartJob *job = new CPVRManagerStartJob(openWindowId); + CPVRManagerStartJob *job = new CPVRManagerStartJob(); CJobManager::GetInstance().AddJob(job, NULL); return; } @@ -422,7 +419,6 @@ void CPVRManager::Start(bool bAsync /* = false */, int openWindowId /* = 0 */) ResetProperties(); SetState(ManagerStateStarting); - m_openWindowId = openWindowId; /* create and open database */ if (!m_database) @@ -510,17 +506,6 @@ void CPVRManager::Process(void) CLog::Log(LOGDEBUG, "PVRManager - %s - entering main loop", __FUNCTION__); g_EpgContainer.Start(); - /* activate startup window */ - if (m_openWindowId > 0) - { - g_windowManager.ActivateWindow(m_openWindowId); - m_openWindowId = 0; - - // let everyone know that the user interface is now ready for usage - CGUIMessage msg(GUI_MSG_NOTIFY_ALL, 0, 0, GUI_MSG_UI_READY); - g_windowManager.SendThreadMessage(msg); - } - bool bRestart(false); while (IsStarted() && m_addons && m_addons->HasConnectedClients() && !bRestart) { @@ -564,11 +549,6 @@ void CPVRManager::Process(void) CLog::Log(LOGNOTICE, "PVRManager - %s - no add-ons enabled anymore. restarting the pvrmanager", __FUNCTION__); CApplicationMessenger::Get().SetPVRManagerState(true); } - else - { - if (IsPVRWindow(g_windowManager.GetActiveWindow())) - g_windowManager.ActivateWindow(WINDOW_HOME); - } } bool CPVRManager::SetWakeupCommand(void) diff --git a/xbmc/pvr/PVRManager.h b/xbmc/pvr/PVRManager.h index 3b71ca67b0..fd3363e1b0 100644 --- a/xbmc/pvr/PVRManager.h +++ b/xbmc/pvr/PVRManager.h @@ -148,9 +148,8 @@ namespace PVR /*! * @brief Start the PVRManager, which loads all PVR data and starts some threads to update the PVR data. * @param bAsync True to (re)start the manager from another thread - * @param openWindowId Window id to open after starting */ - void Start(bool bAsync = false, int openWindowId = 0); + void Start(bool bAsync = false); /*! * @brief Stop the PVRManager and destroy all objects it created. @@ -668,7 +667,6 @@ namespace PVR CCriticalSection m_managerStateMutex; ManagerState m_managerState; CStopWatch *m_parentalTimer; - int m_openWindowId; std::map<std::string, std::string> m_outdatedAddons; static int m_pvrWindowIds[10]; }; diff --git a/xbmc/pvr/addons/PVRClients.cpp b/xbmc/pvr/addons/PVRClients.cpp index d09e1958bc..32e0526bfa 100644 --- a/xbmc/pvr/addons/PVRClients.cpp +++ b/xbmc/pvr/addons/PVRClients.cpp @@ -261,12 +261,21 @@ bool CPVRClients::GetClientName(int iClientId, std::string &strName) const std::vector<SBackend> CPVRClients::GetBackendProperties() const { std::vector<SBackend> backendProperties; - CSingleLock lock(m_critSection); + std::vector<PVR_CLIENT> clients; + + { + CSingleLock lock(m_critSection); + + for (PVR_CLIENTMAP_CITR itr = m_clientMap.begin(); itr != m_clientMap.end(); itr++) + { + PVR_CLIENT client = itr->second; + if (client) + clients.push_back(client); + } + } - for (const auto &entry : m_clientMap) + for (const auto &client : clients) { - const auto &client = entry.second; - if (!client->ReadyToUse()) continue; diff --git a/xbmc/pvr/channels/PVRChannel.cpp b/xbmc/pvr/channels/PVRChannel.cpp index a2a175a3e3..5427882972 100644 --- a/xbmc/pvr/channels/PVRChannel.cpp +++ b/xbmc/pvr/channels/PVRChannel.cpp @@ -807,8 +807,13 @@ int CPVRChannel::EpgID(void) const void CPVRChannel::SetEpgID(int iEpgId) { CSingleLock lock(m_critSection); - m_iEpgId = iEpgId; - SetChanged(); + + if (m_iEpgId != iEpgId) + { + m_iEpgId = iEpgId; + SetChanged(); + m_bChanged = true; + } } bool CPVRChannel::EPGEnabled(void) const diff --git a/xbmc/pvr/dialogs/GUIDialogPVRChannelsOSD.cpp b/xbmc/pvr/dialogs/GUIDialogPVRChannelsOSD.cpp index 1194d4c34d..0aaeebc2af 100644 --- a/xbmc/pvr/dialogs/GUIDialogPVRChannelsOSD.cpp +++ b/xbmc/pvr/dialogs/GUIDialogPVRChannelsOSD.cpp @@ -35,10 +35,13 @@ #include "pvr/PVRManager.h" #include "pvr/channels/PVRChannelGroupsContainer.h" #include "pvr/windows/GUIWindowPVRBase.h" +#include "epg/EpgContainer.h" using namespace PVR; using namespace EPG; +#define MAX_INVALIDATION_FREQUENCY 2000 // limit to one invalidation per X milliseconds + #define CONTROL_LIST 11 CGUIDialogPVRChannelsOSD::CGUIDialogPVRChannelsOSD() : @@ -54,6 +57,8 @@ CGUIDialogPVRChannelsOSD::~CGUIDialogPVRChannelsOSD() if (IsObserving(g_infoManager)) g_infoManager.UnregisterObserver(this); + if (IsObserving(g_EpgContainer)) + g_EpgContainer.UnregisterObserver(this); } bool CGUIDialogPVRChannelsOSD::OnMessage(CGUIMessage& message) @@ -84,6 +89,22 @@ bool CGUIDialogPVRChannelsOSD::OnMessage(CGUIMessage& message) } } break; + case GUI_MSG_REFRESH_LIST: + { + switch(message.GetParam1()) + { + case ObservableMessageCurrentItem: + m_viewControl.SetItems(*m_vecItems); + return true; + case ObservableMessageEpg: + case ObservableMessageEpgContainer: + case ObservableMessageEpgActiveItem: + if (IsActive()) + SetInvalid(); + return true; + } + } + break; } return CGUIDialog::OnMessage(message); @@ -166,6 +187,8 @@ void CGUIDialogPVRChannelsOSD::Update() if (!IsObserving(g_infoManager)) g_infoManager.RegisterObserver(this); + if (!IsObserving(g_EpgContainer)) + g_EpgContainer.RegisterObserver(this); m_viewControl.SetCurrentView(DEFAULT_VIEW_LIST); @@ -193,6 +216,18 @@ void CGUIDialogPVRChannelsOSD::Update() g_graphicsContext.Unlock(); } +void CGUIDialogPVRChannelsOSD::SetInvalid() +{ + if (m_refreshTimeout.IsTimePast()) + { + VECFILEITEMS items = m_vecItems->GetList(); + for (VECFILEITEMS::iterator it = items.begin(); it != items.end(); ++it) + (*it)->SetInvalid(); + CGUIDialog::SetInvalid(); + m_refreshTimeout.Set(MAX_INVALIDATION_FREQUENCY); + } +} + void CGUIDialogPVRChannelsOSD::SaveControlStates() { CGUIDialog::SaveControlStates(); @@ -324,12 +359,8 @@ CGUIControl *CGUIDialogPVRChannelsOSD::GetFirstFocusableControl(int id) void CGUIDialogPVRChannelsOSD::Notify(const Observable &obs, const ObservableMessage msg) { - if (msg == ObservableMessageCurrentItem) - { - g_graphicsContext.Lock(); - m_viewControl.SetItems(*m_vecItems); - g_graphicsContext.Unlock(); - } + CGUIMessage m(GUI_MSG_REFRESH_LIST, GetID(), 0, msg); + CApplicationMessenger::Get().SendGUIMessage(m); } void CGUIDialogPVRChannelsOSD::SaveSelectedItemPath(int iGroupID) diff --git a/xbmc/pvr/dialogs/GUIDialogPVRChannelsOSD.h b/xbmc/pvr/dialogs/GUIDialogPVRChannelsOSD.h index f19c1341f8..376c37bff8 100644 --- a/xbmc/pvr/dialogs/GUIDialogPVRChannelsOSD.h +++ b/xbmc/pvr/dialogs/GUIDialogPVRChannelsOSD.h @@ -45,6 +45,7 @@ namespace PVR virtual void OnDeinitWindow(int nextWindowID); virtual void RestoreControlStates(); virtual void SaveControlStates(); + virtual void SetInvalid(); void CloseOrSelect(unsigned int iItem); void GotoChannel(int iItem); @@ -62,6 +63,7 @@ namespace PVR std::map<int, std::string> m_groupSelectedItemPaths; void SaveSelectedItemPath(int iGroupID); std::string GetLastSelectedItemPath(int iGroupID) const; + XbmcThreads::EndTime m_refreshTimeout; }; } diff --git a/xbmc/pvr/windows/GUIWindowPVRBase.cpp b/xbmc/pvr/windows/GUIWindowPVRBase.cpp index 5a23447e19..841fef0eeb 100644 --- a/xbmc/pvr/windows/GUIWindowPVRBase.cpp +++ b/xbmc/pvr/windows/GUIWindowPVRBase.cpp @@ -27,6 +27,7 @@ #include "dialogs/GUIDialogOK.h" #include "dialogs/GUIDialogYesNo.h" #include "dialogs/GUIDialogSelect.h" +#include "dialogs/GUIDialogProgress.h" #include "filesystem/StackDirectory.h" #include "input/Key.h" #include "guilib/GUIMessage.h" @@ -45,6 +46,8 @@ #include "utils/StringUtils.h" #include "utils/Observer.h" +#define MAX_INVALIDATION_FREQUENCY 2000 // limit to one invalidation per X milliseconds + using namespace PVR; using namespace EPG; @@ -104,7 +107,10 @@ bool CGUIWindowPVRBase::OnBack(int actionID) { // don't call CGUIMediaWindow as it will attempt to go to the parent folder which we don't want. if (GetPreviousWindow() != WINDOW_FULLSCREEN_LIVETV) + { g_windowManager.ActivateWindow(WINDOW_HOME); + return true; + } else return CGUIWindow::OnBack(actionID); } @@ -115,13 +121,49 @@ void CGUIWindowPVRBase::OnInitWindow(void) { if (!g_PVRManager.IsStarted() || !g_PVRClients->HasConnectedClients()) { - g_windowManager.PreviousWindow(); - CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Warning, - g_localizeStrings.Get(19045), - g_localizeStrings.Get(19044)); - return; + // wait until the PVR manager has been started + CGUIDialogProgress* dialog = static_cast<CGUIDialogProgress*>(g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS)); + if (dialog) + { + dialog->SetHeading(CVariant{19235}); + dialog->SetText(CVariant{19045}); + dialog->ShowProgressBar(false); + dialog->StartModal(); + + // do not block the gfx context while waiting + CSingleExit exit(g_graphicsContext); + + CEvent event(true); + while(!event.WaitMSec(1)) + { + if (g_PVRManager.IsStarted() && g_PVRClients->HasConnectedClients()) + event.Set(); + + if (dialog->IsCanceled()) + { + // return to previous window if canceled + dialog->Close(); + g_windowManager.PreviousWindow(); + return; + } + + g_windowManager.ProcessRenderLoop(false); + } + + dialog->Close(); + } } + { + // set window group to playing group + CPVRChannelGroupPtr group = g_PVRManager.GetPlayingGroup(m_bRadio); + CSingleLock lock(m_critSection); + if (m_group != group) + m_viewControl.SetSelectedItem(0); + m_group = group; + } + SetProperty("IsRadio", m_bRadio ? "true" : ""); + m_vecItems->SetPath(GetDirectoryPath()); CGUIMediaWindow::OnInitWindow(); @@ -139,16 +181,6 @@ bool CGUIWindowPVRBase::OnMessage(CGUIMessage& message) { switch (message.GetMessage()) { - case GUI_MSG_WINDOW_INIT: - { - CPVRChannelGroupPtr group = g_PVRManager.GetPlayingGroup(m_bRadio); - if (m_group != group) - m_viewControl.SetSelectedItem(0); - m_group = group; - SetProperty("IsRadio", m_bRadio ? "true" : ""); - } - break; - case GUI_MSG_CLICKED: { switch (message.GetSenderId()) @@ -163,6 +195,32 @@ bool CGUIWindowPVRBase::OnMessage(CGUIMessage& message) return CGUIMediaWindow::OnMessage(message); } +bool CGUIWindowPVRBase::IsValidMessage(CGUIMessage& message) +{ + bool bReturn = false; + + // we need to protect the pvr windows against certain messages + // if the pvr manager is not started yet. we only want to support + // that the window can be loaded to show the user an info about + // the manager startup. Any other interactions with the windows + // would cause access violations. + switch (message.GetMessage()) + { + // valid messages + case GUI_MSG_WINDOW_LOAD: + case GUI_MSG_WINDOW_INIT: + case GUI_MSG_WINDOW_DEINIT: + bReturn = true; + break; + default: + if (g_PVRManager.IsStarted()) + bReturn = true; + break; + } + + return bReturn; +} + bool CGUIWindowPVRBase::OnContextButton(int itemNumber, CONTEXT_BUTTON button) { bool bReturn = false; @@ -209,10 +267,14 @@ bool CGUIWindowPVRBase::OnContextButton(int itemNumber, CONTEXT_BUTTON button) void CGUIWindowPVRBase::SetInvalid() { - VECFILEITEMS items = m_vecItems->GetList(); - for (VECFILEITEMS::iterator it = items.begin(); it != items.end(); ++it) - (*it)->SetInvalid(); - CGUIMediaWindow::SetInvalid(); + if (m_refreshTimeout.IsTimePast()) + { + VECFILEITEMS items = m_vecItems->GetList(); + for (VECFILEITEMS::iterator it = items.begin(); it != items.end(); ++it) + (*it)->SetInvalid(); + CGUIMediaWindow::SetInvalid(); + m_refreshTimeout.Set(MAX_INVALIDATION_FREQUENCY); + } } bool CGUIWindowPVRBase::OpenGroupSelectionDialog(void) diff --git a/xbmc/pvr/windows/GUIWindowPVRBase.h b/xbmc/pvr/windows/GUIWindowPVRBase.h index b6f5eb9e10..bfe32099ff 100644 --- a/xbmc/pvr/windows/GUIWindowPVRBase.h +++ b/xbmc/pvr/windows/GUIWindowPVRBase.h @@ -95,6 +95,7 @@ namespace PVR virtual void ShowRecordingInfo(CFileItem *item); virtual bool UpdateEpgForChannel(CFileItem *item); virtual void UpdateSelectedItemPath(); + virtual bool IsValidMessage(CGUIMessage& message); void CheckResumeRecording(CFileItem *item); static std::map<bool, std::string> m_selectedItemPaths; @@ -104,5 +105,6 @@ namespace PVR private: CPVRChannelGroupPtr m_group; + XbmcThreads::EndTime m_refreshTimeout; }; } diff --git a/xbmc/pvr/windows/GUIWindowPVRChannels.cpp b/xbmc/pvr/windows/GUIWindowPVRChannels.cpp index 9940ca3557..dad4af59f0 100644 --- a/xbmc/pvr/windows/GUIWindowPVRChannels.cpp +++ b/xbmc/pvr/windows/GUIWindowPVRChannels.cpp @@ -162,6 +162,9 @@ bool CGUIWindowPVRChannels::OnAction(const CAction &action) bool CGUIWindowPVRChannels::OnMessage(CGUIMessage& message) { + if (!IsValidMessage(message)) + return false; + bool bReturn = false; switch (message.GetMessage()) { @@ -220,6 +223,8 @@ bool CGUIWindowPVRChannels::OnMessage(CGUIMessage& message) { case ObservableMessageChannelGroup: case ObservableMessageTimers: + case ObservableMessageEpg: + case ObservableMessageEpgContainer: case ObservableMessageEpgActiveItem: case ObservableMessageCurrentItem: { diff --git a/xbmc/pvr/windows/GUIWindowPVRGuide.cpp b/xbmc/pvr/windows/GUIWindowPVRGuide.cpp index 536aabe070..dbb599b12c 100644 --- a/xbmc/pvr/windows/GUIWindowPVRGuide.cpp +++ b/xbmc/pvr/windows/GUIWindowPVRGuide.cpp @@ -33,6 +33,8 @@ #include "pvr/addons/PVRClients.h" #include "pvr/timers/PVRTimers.h" +#define MAX_UPDATE_FREQUENCY 3000 // limit to maximum one update/refresh in x milliseconds + using namespace PVR; using namespace EPG; @@ -54,6 +56,11 @@ void CGUIWindowPVRGuide::OnInitWindow() if (m_guiState.get()) m_viewControl.SetCurrentView(m_guiState->GetViewAsControl(), false); + CGUIEPGGridContainer *epgGridContainer = + dynamic_cast<CGUIEPGGridContainer*>(GetControl(m_viewControl.GetCurrentControl())); + if (epgGridContainer) + epgGridContainer->GoToNow(); + CGUIWindowPVRBase::OnInitWindow(); } @@ -178,6 +185,9 @@ bool CGUIWindowPVRGuide::OnAction(const CAction &action) bool CGUIWindowPVRGuide::OnMessage(CGUIMessage& message) { + if (!IsValidMessage(message)) + return false; + bool bReturn = false; switch (message.GetMessage()) { @@ -251,6 +261,7 @@ bool CGUIWindowPVRGuide::OnMessage(CGUIMessage& message) { // let's set the view mode first before update CGUIWindowPVRBase::OnMessage(message); + m_nextUpdateTimeout.SetExpired(); Refresh(true); bReturn = true; break; @@ -263,9 +274,12 @@ bool CGUIWindowPVRGuide::OnMessage(CGUIMessage& message) case ObservableMessageEpgContainer: { m_bUpdateRequired = true; - /* update the current window if the EPG timeline view is visible */ - if (IsActive() && m_viewControl.GetCurrentControl() == GUIDE_VIEW_TIMELINE) + // do not allow more than MAX_UPDATE_FREQUENCY updates + if (IsActive() && m_nextUpdateTimeout.IsTimePast()) + { Refresh(true); + m_nextUpdateTimeout.Set(MAX_UPDATE_FREQUENCY); + } bReturn = true; break; } diff --git a/xbmc/pvr/windows/GUIWindowPVRGuide.h b/xbmc/pvr/windows/GUIWindowPVRGuide.h index cc815b2fa7..af30eb6176 100644 --- a/xbmc/pvr/windows/GUIWindowPVRGuide.h +++ b/xbmc/pvr/windows/GUIWindowPVRGuide.h @@ -22,6 +22,7 @@ #include "GUIWindowPVRBase.h" #include "epg/GUIEPGGridContainer.h" +#include "threads/SystemClock.h" class CSetting; @@ -65,5 +66,7 @@ namespace PVR CPVRChannelGroupPtr m_cachedChannelGroup; bool m_bUpdateRequired; + + XbmcThreads::EndTime m_nextUpdateTimeout; }; } diff --git a/xbmc/pvr/windows/GUIWindowPVRRecordings.cpp b/xbmc/pvr/windows/GUIWindowPVRRecordings.cpp index a028ca0420..763c861eea 100644 --- a/xbmc/pvr/windows/GUIWindowPVRRecordings.cpp +++ b/xbmc/pvr/windows/GUIWindowPVRRecordings.cpp @@ -235,6 +235,9 @@ void CGUIWindowPVRRecordings::UpdateButtons(void) bool CGUIWindowPVRRecordings::OnMessage(CGUIMessage &message) { + if (!IsValidMessage(message)) + return false; + bool bReturn = false; switch (message.GetMessage()) { @@ -293,6 +296,9 @@ bool CGUIWindowPVRRecordings::OnMessage(CGUIMessage &message) switch(message.GetParam1()) { case ObservableMessageTimers: + case ObservableMessageEpg: + case ObservableMessageEpgContainer: + case ObservableMessageEpgActiveItem: case ObservableMessageCurrentItem: { if (IsActive()) diff --git a/xbmc/pvr/windows/GUIWindowPVRSearch.cpp b/xbmc/pvr/windows/GUIWindowPVRSearch.cpp index 6ae15ae090..4f2221f899 100644 --- a/xbmc/pvr/windows/GUIWindowPVRSearch.cpp +++ b/xbmc/pvr/windows/GUIWindowPVRSearch.cpp @@ -170,6 +170,9 @@ void CGUIWindowPVRSearch::OnPrepareFileItems(CFileItemList &items) bool CGUIWindowPVRSearch::OnMessage(CGUIMessage &message) { + if (!IsValidMessage(message)) + return false; + if (message.GetMessage() == GUI_MSG_CLICKED) { if (message.GetSenderId() == m_viewControl.GetCurrentControl()) diff --git a/xbmc/pvr/windows/GUIWindowPVRTimers.cpp b/xbmc/pvr/windows/GUIWindowPVRTimers.cpp index 70794b78f5..c769d2a862 100644 --- a/xbmc/pvr/windows/GUIWindowPVRTimers.cpp +++ b/xbmc/pvr/windows/GUIWindowPVRTimers.cpp @@ -108,6 +108,9 @@ bool CGUIWindowPVRTimers::Update(const std::string &strDirectory, bool updateFil bool CGUIWindowPVRTimers::OnMessage(CGUIMessage &message) { + if (!IsValidMessage(message)) + return false; + bool bReturn = false; switch (message.GetMessage()) { @@ -143,6 +146,10 @@ bool CGUIWindowPVRTimers::OnMessage(CGUIMessage &message) switch(message.GetParam1()) { case ObservableMessageTimers: + case ObservableMessageEpg: + case ObservableMessageEpgContainer: + case ObservableMessageEpgActiveItem: + case ObservableMessageCurrentItem: { if (IsActive()) SetInvalid(); diff --git a/xbmc/utils/AMLUtils.cpp b/xbmc/utils/AMLUtils.cpp index bcb57fcd46..ac2667c165 100644 --- a/xbmc/utils/AMLUtils.cpp +++ b/xbmc/utils/AMLUtils.cpp @@ -356,6 +356,15 @@ bool aml_mode_to_resolution(const char *mode, RESOLUTION_INFO *res) res->fRefreshRate = 60; res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE; } + else if (StringUtils::EqualsNoCase(fromMode, "1080p23hz")) + { + res->iWidth = 1920; + res->iHeight= 1080; + res->iScreenWidth = 1920; + res->iScreenHeight= 1080; + res->fRefreshRate = 23.976; + res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE; + } else if (StringUtils::EqualsNoCase(fromMode, "1080p24hz")) { res->iWidth = 1920; @@ -383,6 +392,15 @@ bool aml_mode_to_resolution(const char *mode, RESOLUTION_INFO *res) res->fRefreshRate = 50; res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE; } + else if (StringUtils::EqualsNoCase(fromMode, "1080p59hz")) + { + res->iWidth = 1920; + res->iHeight= 1080; + res->iScreenWidth = 1920; + res->iScreenHeight= 1080; + res->fRefreshRate = 59.940; + res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE; + } else if (StringUtils::EqualsNoCase(fromMode, "1080i")) { res->iWidth = 1920; @@ -401,6 +419,15 @@ bool aml_mode_to_resolution(const char *mode, RESOLUTION_INFO *res) res->fRefreshRate = 50; res->dwFlags = D3DPRESENTFLAG_INTERLACED; } + else if (StringUtils::EqualsNoCase(fromMode, "1080i59hz")) + { + res->iWidth = 1920; + res->iHeight= 1080; + res->iScreenWidth = 1920; + res->iScreenHeight= 1080; + res->fRefreshRate = 59.940; + res->dwFlags = D3DPRESENTFLAG_INTERLACED; + } else if (StringUtils::EqualsNoCase(fromMode, "4k2ksmpte")) { res->iWidth = 1920; @@ -410,6 +437,15 @@ bool aml_mode_to_resolution(const char *mode, RESOLUTION_INFO *res) res->fRefreshRate = 24; res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE; } + else if (StringUtils::EqualsNoCase(fromMode, "4k2k23hz")) + { + res->iWidth = 1920; + res->iHeight= 1080; + res->iScreenWidth = 3840; + res->iScreenHeight= 2160; + res->fRefreshRate = 23.976; + res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE; + } else if (StringUtils::EqualsNoCase(fromMode, "4k2k24hz")) { res->iWidth = 1920; @@ -428,6 +464,15 @@ bool aml_mode_to_resolution(const char *mode, RESOLUTION_INFO *res) res->fRefreshRate = 25; res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE; } + else if (StringUtils::EqualsNoCase(fromMode, "4k2k29hz")) + { + res->iWidth = 1920; + res->iHeight= 1080; + res->iScreenWidth = 3840; + res->iScreenHeight= 2160; + res->fRefreshRate = 29.970; + res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE; + } else if (StringUtils::EqualsNoCase(fromMode, "4k2k30hz")) { res->iWidth = 1920; diff --git a/xbmc/utils/ProgressJob.cpp b/xbmc/utils/ProgressJob.cpp index 3a69eafb18..069e3615c0 100644 --- a/xbmc/utils/ProgressJob.cpp +++ b/xbmc/utils/ProgressJob.cpp @@ -81,9 +81,8 @@ bool CProgressJob::DoModal() // do the work bool result = DoWork(); - // close the progress dialog - if (m_autoClose) - m_progressDialog->Close(); + // mark the progress dialog as finished (will close it) + MarkFinished(); m_modal = false; return result; @@ -179,7 +178,12 @@ void CProgressJob::MarkFinished() if (m_progress != NULL) { if (m_updateProgress) + { m_progress->MarkFinished(); + // We don't own this pointer and it will be deleted after it's marked finished + // just set it to nullptr so we don't try to use it again + m_progress = nullptr; + } } else if (m_progressDialog != NULL && m_autoClose) m_progressDialog->Close(); diff --git a/xbmc/utils/RecentlyAddedJob.cpp b/xbmc/utils/RecentlyAddedJob.cpp index a2f130e0a6..094133d127 100644 --- a/xbmc/utils/RecentlyAddedJob.cpp +++ b/xbmc/utils/RecentlyAddedJob.cpp @@ -272,7 +272,7 @@ bool CRecentlyAddedJob::UpdateMusic() home->SetProperty("LatestAlbum." + value + ".Title" , album.strAlbum); home->SetProperty("LatestAlbum." + value + ".Year" , album.iYear); - home->SetProperty("LatestAlbum." + value + ".Artist" , album.artist); + home->SetProperty("LatestAlbum." + value + ".Artist" , StringUtils::Join(album.artist, g_advancedSettings.m_videoItemSeparator)); home->SetProperty("LatestAlbum." + value + ".Rating" , album.iRating); home->SetProperty("LatestAlbum." + value + ".Path" , strDBpath); home->SetProperty("LatestAlbum." + value + ".Thumb" , strThumb); diff --git a/xbmc/utils/Splash.cpp b/xbmc/utils/Splash.cpp index c5da041d3f..5d663919e0 100644 --- a/xbmc/utils/Splash.cpp +++ b/xbmc/utils/Splash.cpp @@ -29,46 +29,39 @@ using namespace XFILE; -CSplash::CSplash(const std::string& imageName) : CThread("Splash"), m_ImageName(imageName) +CSplash::CSplash() { - fade = 0.5; - m_messageLayout = NULL; - m_image = NULL; - m_layoutWasLoading = false; } - CSplash::~CSplash() { - Stop(); delete m_image; - delete m_messageLayout; } -void CSplash::OnStartup() -{} - -void CSplash::OnExit() -{} - -void CSplash::Show() +CSplash& CSplash::Get() { - Show(""); + static CSplash instance; + return instance; } -void CSplash::Show(const std::string& message) +void CSplash::Show() { - g_graphicsContext.Lock(); - g_graphicsContext.Clear(); - - RESOLUTION_INFO res(1280,720,0); - g_graphicsContext.SetRenderingResolution(res, true); if (!m_image) { - m_image = new CGUIImage(0, 0, 0, 0, 1280, 720, CTextureInfo(m_ImageName)); + std::string splashImage = "special://home/media/Splash.png"; + if (!XFILE::CFile::Exists(splashImage)) + splashImage = "special://xbmc/media/Splash.png"; + + m_image = new CGUIImage(0, 0, 0, 0, g_graphicsContext.GetWidth(), g_graphicsContext.GetHeight(), CTextureInfo(splashImage)); m_image->SetAspectRatio(CAspectRatio::AR_CENTER); } + g_graphicsContext.Lock(); + g_graphicsContext.Clear(); + + RESOLUTION_INFO res = g_graphicsContext.GetResInfo(); + g_graphicsContext.SetRenderingResolution(res, true); + //render splash image g_Windowing.BeginRender(); @@ -76,60 +69,9 @@ void CSplash::Show(const std::string& message) m_image->Render(); m_image->FreeResources(); - // render message - if (!message.empty()) - { - if (!m_layoutWasLoading) - { - // load arial font, white body, no shadow, size: 20, no additional styling - CGUIFont *messageFont = g_fontManager.LoadTTF("__splash__", "arial.ttf", 0xFFFFFFFF, 0, 20, FONT_STYLE_NORMAL, false, 1.0f, 1.0f, &res); - if (messageFont) - m_messageLayout = new CGUITextLayout(messageFont, true, 0); - m_layoutWasLoading = true; - } - if (m_messageLayout) - { - m_messageLayout->Update(message, 1150, false, true); - - float textWidth, textHeight; - m_messageLayout->GetTextExtent(textWidth, textHeight); - // ideally place text in center of empty area below splash image - float y = 540 + m_image->GetTextureHeight() / 4 - textHeight / 2; - if (y + textHeight > 720) // make sure entire text is visible - y = 720 - textHeight; - - m_messageLayout->RenderOutline(640, y, 0, 0xFF000000, XBFONT_CENTER_X, 1280); - } - } - //show it on screen g_Windowing.EndRender(); CDirtyRegionList dirty; g_graphicsContext.Flip(dirty); g_graphicsContext.Unlock(); } - -void CSplash::Hide() -{ -} - -void CSplash::Process() -{ - Show(); -} - -bool CSplash::Start() -{ - if (m_ImageName.empty() || !CFile::Exists(m_ImageName)) - { - CLog::Log(LOGDEBUG, "Splash image %s not found", m_ImageName.c_str()); - return false; - } - Create(); - return true; -} - -void CSplash::Stop() -{ - StopThread(); -} diff --git a/xbmc/utils/Splash.h b/xbmc/utils/Splash.h index 2cd7a4b13c..5f4375dbb9 100644 --- a/xbmc/utils/Splash.h +++ b/xbmc/utils/Splash.h @@ -21,36 +21,24 @@ */ #include <string> -#include "threads/Thread.h" -class CGUITextLayout; class CGUIImage; -class CSplash : public CThread +class CSplash { public: - CSplash(const std::string& imageName); - virtual ~CSplash(); - - bool Start(); - void Stop(); + static CSplash& Get(); - // In case you don't want to use another thread void Show(); - void Show(const std::string& message); - void Hide(); - -private: - virtual void Process(); - virtual void OnStartup(); - virtual void OnExit(); - float fade; - std::string m_ImageName; +protected: + CSplash(); + CSplash(const CSplash&); + CSplash& operator=(CSplash const&); + virtual ~CSplash(); - CGUITextLayout* m_messageLayout; +private: CGUIImage* m_image; - bool m_layoutWasLoading; #ifdef HAS_DX D3DGAMMARAMP newRamp; D3DGAMMARAMP oldRamp; diff --git a/xbmc/utils/posix/PosixInterfaceForCLog.cpp b/xbmc/utils/posix/PosixInterfaceForCLog.cpp index 3f80594f06..4b7d09648b 100644 --- a/xbmc/utils/posix/PosixInterfaceForCLog.cpp +++ b/xbmc/utils/posix/PosixInterfaceForCLog.cpp @@ -40,6 +40,7 @@ CPosixInterfaceForCLog::~CPosixInterfaceForCLog() { if (m_file) fclose(m_file); + m_file = NULL; } bool CPosixInterfaceForCLog::OpenLogFile(const std::string &logFilename, const std::string &backupOldLogToFilename) diff --git a/xbmc/video/VideoDatabase.cpp b/xbmc/video/VideoDatabase.cpp index 7e0113f9ec..e6b61440a6 100644 --- a/xbmc/video/VideoDatabase.cpp +++ b/xbmc/video/VideoDatabase.cpp @@ -6844,19 +6844,21 @@ std::string CVideoDatabase::GetContentForPath(const std::string& strPath) { if (scraper->Content() == CONTENT_TVSHOWS) { - if (foundDirectly) - return "tvshows"; - // check for episodes or seasons. Assumptions are: // 1. if episodes are in the path then we're in episodes. // 2. if no episodes are found, and content was set directly on this path, then we're in shows. // 3. if no episodes are found, and content was not set directly on this path, we're in seasons (assumes tvshows/seasons/episodes) - std::string sql = PrepareSQL("SELECT count(1) FROM episode_view WHERE strPath LIKE '%s%%' LIMIT 1", strPath.c_str()); + std::string sql = "SELECT COUNT(*) FROM episode_view "; + + if (foundDirectly) + sql += PrepareSQL("WHERE strPath = '%s'", strPath.c_str()); + else + sql += PrepareSQL("WHERE strPath LIKE '%s%%'", strPath.c_str()); m_pDS->query( sql.c_str() ); if (m_pDS->num_rows() && m_pDS->fv(0).get_asInt() > 0) return "episodes"; - return "seasons"; + return foundDirectly ? "tvshows" : "seasons"; } return TranslateContent(scraper->Content()); } diff --git a/xbmc/win32/WIN32Util.cpp b/xbmc/win32/WIN32Util.cpp index f484935195..0bf3a98992 100644 --- a/xbmc/win32/WIN32Util.cpp +++ b/xbmc/win32/WIN32Util.cpp @@ -217,18 +217,15 @@ bool CWIN32Util::PowerManagement(PowerState State) return false; } - // process OnSleep() events. This is called in main thread. - g_powerManager.ProcessEvents(); - switch (State) { case POWERSTATE_HIBERNATE: CLog::Log(LOGINFO, "Asking Windows to hibernate..."); - return SetSuspendState(true,true,false) == TRUE; + return SetSuspendState(true, true, false) == TRUE; break; case POWERSTATE_SUSPEND: CLog::Log(LOGINFO, "Asking Windows to suspend..."); - return SetSuspendState(false,true,false) == TRUE; + return SetSuspendState(false, true, false) == TRUE; break; case POWERSTATE_SHUTDOWN: CLog::Log(LOGINFO, "Shutdown Windows..."); diff --git a/xbmc/windowing/egl/EGLNativeTypeAmlAndroid.cpp b/xbmc/windowing/egl/EGLNativeTypeAmlAndroid.cpp index 5ea1d7c13c..111442cf49 100644 --- a/xbmc/windowing/egl/EGLNativeTypeAmlAndroid.cpp +++ b/xbmc/windowing/egl/EGLNativeTypeAmlAndroid.cpp @@ -28,14 +28,18 @@ #include "utils/SysfsUtils.h" #include "utils/AMLUtils.h" +bool CEGLNativeTypeAmlAndroid::m_isWritable = false; + bool CEGLNativeTypeAmlAndroid::CheckCompatibility() { if (aml_present()) { + m_isWritable = false; if (SysfsUtils::HasRW("/sys/class/display/mode")) - return true; + m_isWritable = true; else - CLog::Log(LOGERROR, "AMLEGL: no rw on /sys/class/display/mode"); + CLog::Log(LOGINFO, "AMLEGL: no rw on /sys/class/display/mode"); + return true; } return false; } @@ -62,6 +66,9 @@ bool CEGLNativeTypeAmlAndroid::GetNativeResolution(RESOLUTION_INFO *res) const bool CEGLNativeTypeAmlAndroid::SetNativeResolution(const RESOLUTION_INFO &res) { + if (!m_isWritable) + return false; + switch((int)(res.fRefreshRate*10)) { default: @@ -80,6 +87,16 @@ bool CEGLNativeTypeAmlAndroid::SetNativeResolution(const RESOLUTION_INFO &res) break; } break; + case 599: + switch(res.iScreenWidth) + { + default: + if (res.dwFlags & D3DPRESENTFLAG_INTERLACED) + return SetDisplayResolution("1080i59hz"); + else + return SetDisplayResolution("1080p59hz"); + break; + } case 500: switch(res.iScreenWidth) { @@ -106,6 +123,17 @@ bool CEGLNativeTypeAmlAndroid::SetNativeResolution(const RESOLUTION_INFO &res) break; } break; + case 299: + switch(res.iScreenWidth) + { + case 3840: + return SetDisplayResolution("4k2k29hz"); + break; + default: + return SetDisplayResolution("1080p29hz"); + break; + } + break; case 250: switch(res.iScreenWidth) { @@ -131,6 +159,17 @@ bool CEGLNativeTypeAmlAndroid::SetNativeResolution(const RESOLUTION_INFO &res) break; } break; + case 239: + switch(res.iScreenWidth) + { + case 3840: + return SetDisplayResolution("4k2k23hz"); + break; + default: + return SetDisplayResolution("1080p23hz"); + break; + } + break; } return false; diff --git a/xbmc/windowing/egl/EGLNativeTypeAmlAndroid.h b/xbmc/windowing/egl/EGLNativeTypeAmlAndroid.h index 27a935ba58..688753717e 100644 --- a/xbmc/windowing/egl/EGLNativeTypeAmlAndroid.h +++ b/xbmc/windowing/egl/EGLNativeTypeAmlAndroid.h @@ -36,6 +36,7 @@ public: protected: mutable std::string m_curHdmiResolution; mutable RESOLUTION_INFO m_fb_res; + static bool m_isWritable; bool SetDisplayResolution(const char *resolution); }; diff --git a/xbmc/windows/GUIWindowSplash.cpp b/xbmc/windows/GUIWindowSplash.cpp new file mode 100644 index 0000000000..8ac182764a --- /dev/null +++ b/xbmc/windows/GUIWindowSplash.cpp @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2015 Team XBMC + * http://xbmc.org + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XBMC; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +#include "GUIWindowSplash.h" +#include "filesystem/File.h" +#include "filesystem/SpecialProtocol.h" +#include "guilib/GUIImage.h" +#include "guilib/GUIWindowManager.h" +#include "utils/log.h" + +CGUIWindowSplash::CGUIWindowSplash(void) : CGUIWindow(WINDOW_SPLASH, "") +{ + m_loadType = LOAD_ON_GUI_INIT; + m_image = nullptr; +} + +CGUIWindowSplash::~CGUIWindowSplash(void) +{ + delete m_image; +} + +void CGUIWindowSplash::OnInitWindow() +{ + std::string splashImage = "special://home/media/Splash.png"; + if (!XFILE::CFile::Exists(splashImage)) + splashImage = "special://xbmc/media/Splash.png"; + + CLog::Log(LOGINFO, "load splash image: %s", CSpecialProtocol::TranslatePath(splashImage).c_str()); + + m_image = new CGUIImage(0, 0, 0, 0, g_graphicsContext.GetWidth(), g_graphicsContext.GetHeight(), CTextureInfo(splashImage)); + m_image->SetAspectRatio(CAspectRatio::AR_CENTER); +} + +void CGUIWindowSplash::Render() +{ + g_graphicsContext.SetRenderingResolution(g_graphicsContext.GetResInfo(), true); + m_image->SetWidth(g_graphicsContext.GetWidth()); + m_image->SetHeight(g_graphicsContext.GetHeight()); + m_image->AllocResources(); + m_image->Render(); + m_image->FreeResources(); +}
\ No newline at end of file diff --git a/xbmc/windows/GUIWindowSplash.h b/xbmc/windows/GUIWindowSplash.h new file mode 100644 index 0000000000..510db066c9 --- /dev/null +++ b/xbmc/windows/GUIWindowSplash.h @@ -0,0 +1,39 @@ +#pragma once + +/* + * Copyright (C) 2015 Team XBMC + * http://xbmc.org + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XBMC; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +#include "guilib/GUIWindow.h" + +class CGUITextLayout; +class CGUIImage; + +class CGUIWindowSplash : public CGUIWindow +{ +public: + CGUIWindowSplash(void); + virtual ~CGUIWindowSplash(void); + virtual bool OnAction(const CAction &action) { return false; }; + virtual void Render(); +protected: + virtual void OnInitWindow(); +private: + CGUIImage* m_image; +}; diff --git a/xbmc/windows/Makefile b/xbmc/windows/Makefile index 059f24abb2..a328db2761 100644 --- a/xbmc/windows/Makefile +++ b/xbmc/windows/Makefile @@ -6,6 +6,7 @@ SRCS=GUIMediaWindow.cpp \ GUIWindowPointer.cpp \ GUIWindowScreensaver.cpp \ GUIWindowScreensaverDim.cpp \ + GUIWindowSplash.cpp \ GUIWindowStartup.cpp \ GUIWindowSystemInfo.cpp \ GUIWindowWeather.cpp \ |