diff options
author | theuni <theuni-nospam-@xbmc.org> | 2012-02-29 20:42:50 -0500 |
---|---|---|
committer | theuni <theuni-nospam-@xbmc.org> | 2012-02-29 20:42:50 -0500 |
commit | 3f4ad7c1129fac51c13203b8a035a5c5f105a2c2 (patch) | |
tree | 2cd4b3987916c1d6426415bb2b175ff062a5fa65 | |
parent | 4246dffa9896d0c66dc79a97c2d3c8a3d4c4a183 (diff) | |
parent | dd522132757b4dcb1d6c7d8125588bc43f12bd46 (diff) |
Merge remote-tracking branch 'origin/master' into Eden
26 files changed, 182 insertions, 119 deletions
diff --git a/addons/skin.confluence/language/Czech/strings.xml b/addons/skin.confluence/language/Czech/strings.xml index a0a341a44f..2d5551d016 100644 --- a/addons/skin.confluence/language/Czech/strings.xml +++ b/addons/skin.confluence/language/Czech/strings.xml @@ -1,7 +1,8 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <!--Translator: ezechiel1917--> -<!--Date of translation: 26/09/2010--> -<!--updated 22/10/2011 by mirek--> +<!--Date of translation: 26.09.2010--> +<!--Updated 22.11.2011 by mirek--> +<!--Updated 06.01.2012 by babča--> <strings> <!-- Misc labels --> <string id="31000">Změnit</string> @@ -22,7 +23,7 @@ <string id="31025">Položek</string> <string id="31026">Další možnosti</string> <string id="31027">Umístění</string> - + <!-- View Type labels --> <string id="31028">Obaly</string> <string id="31029">Fanart</string> @@ -39,7 +40,7 @@ <string id="31044">PŘETÁČÍ SE VPŘED</string> <string id="31045">PŘETÁČÍ SE ZPĚT</string> <string id="31046">Vlastnosti zvuku</string> - <string id="31047">Akutální předvolba</string> + <string id="31047">Aktuální předvolba</string> <string id="31048">Předvolby vizualizace</string> <string id="31049">Čas ukončení</string> <string id="31050">Seřadit: vzestupně</string> @@ -54,7 +55,7 @@ <string id="31059">Aktuální seznam stop</string> <string id="31060">Tento soubor se skládá z více částí. Vyberte tu, od které chcete spustit přehrávání.</string> <string id="31061">Aktuálně vybraný</string> - + <!-- Skin Settings labels --> <string id="31100"></string> <string id="31101">Informace na Úvodní obrazovce</string> @@ -88,7 +89,7 @@ <string id="31128">Texty skladeb</string> <string id="31129"></string> <string id="31130"></string> - + <string id="31131"></string> <string id="31132">Doplněk Texty skladeb</string> <string id="31133">Doplněk Titulky</string> @@ -129,7 +130,7 @@ <string id="31318">Malý Fanart</string> <string id="31319">Vybraný profil</string> <string id="31320">Naposledy přihlášen</string> - <string id="31321">Vyběr Karaoke skladby</string> + <string id="31321">Výběr karaoke skladby</string> <string id="31322">Odvysíláno</string> <string id="31323">Nejnovější filmy</string> <string id="31324">Nejnovější epizody</string> @@ -162,12 +163,12 @@ <string id="31403">[B]MOŽNOSTI OBRÁZKŮ[/B][CR][CR]Možnosti zobrazení obrázků · Konfigurace prezentace</string> <string id="31404">[B]MOŽNOSTI POČASÍ[/B][CR][CR]Nastavení oblastí pro předpověď počasí</string> <string id="31405">[B]MOŽNOSTI SÍTĚ[/B][CR][CR]Možnosti ovládání XBMC přes UPnP a HTTP · Nastavení sdílení médií[CR]Nastavení přístupu na internet</string> - <string id="31406">[B]MOŽNOSTI SYSTÉMU[/B][CR][CR]Nastavení a kalibrace obrazovky · Konfigurace výstupu zvuku · Nastavení dálkového ovládání[CR]Možnosti úsporného režimu · Ukládání informací o ladění · Konfigurace rodičovského zámku</string> + <string id="31406">[B]MOŽNOSTI SYSTÉMU[/B][CR][CR]Nastavení obrazovky · Konfigurace výstupu zvuku · Nastavení dálkového ovládání[CR]Možnosti úsporného režimu · Ukládání informací o ladění · Rodičovský zámek</string> <string id="31407">[B]MOŽNOSTI VZHLEDU[/B][CR][CR]Přizpůsobení vzhledu Confluence · Správa sekcí na úvodní obrazovce[CR]Nastavení pozadí vzhledu</string> <string id="31408">[B]MOŽNOSTI DOPLŇKŮ[/B][CR][CR]Správa nainstalovaných doplňků · Vyhledávání a instalace doplňků z xbmc.org[CR]Nastavení doplňků</string> <string id="31421">Přihlášení uživatele[CR]Pokračujte výběrem profilu</string> - + <!-- Weather plugin --> <string id="31900">Mapy počasí</string> <string id="31901">Předpověď na 36 hodin</string> diff --git a/addons/weather.wunderground/addon.xml b/addons/weather.wunderground/addon.xml index 06e5deb593..fa37e8ec06 100644 --- a/addons/weather.wunderground/addon.xml +++ b/addons/weather.wunderground/addon.xml @@ -8,13 +8,16 @@ <extension point="xbmc.addon.metadata"> <summary lang="bg">Синоптична прогноза от wunderground.com</summary> <summary lang="en">Weather forecast from wunderground.com</summary> + <summary lang="fi">Sääennusteet wunderground.com -sivustolta</summary> <summary lang="se">Väderprognos från wunderground.com</summary> <summary lang="zh">来自wunderground.com的天气预报</summary> <description lang="bg">Прогноза за времето осигурена от Weather Underground (http://www.wunderground.com/)</description> <description lang="en">Weather forecast provided by Weather Underground (http://www.wunderground.com/)</description> + <description lang="fi">Sääennusteet Weather Underground -sivuston tarjoamina (http://www.wunderground.com/)</description> <description lang="se">Väderprognos tillhandahållen av Weather Underground (http://www.wunderground.com/)</description> <description lang="zh">由Weather Underground(http://www.wunderground.com/)提供的天气预报</description> <disclaimer lang="en">Use of this add-on implies that you have agreed to the Terms of Service located at http://www.wunderground.com/weather/api/d/terms.html</disclaimer> + <disclaimer lang="fi">Tämän lisäosan käyttäminen tarkoittaa, että olet hyväksynyt käyttöehdot, jotka sijaitsevat osoitteessa http://www.wunderground.com/weather/api/d/terms.html</disclaimer> <disclaimer lang="se">Användning av detta tillägg innebär att du har godkänt Terms of Service från http://www.wunderground.com/weather/api/d/terms.html</disclaimer> <disclaimer lang="zh">使用此扩展功能意味着你同意此连接下的服务条款:http://www.wunderground.com/weather/api/d/terms.html</disclaimer> <platform>all</platform> diff --git a/addons/webinterface.default/addon.xml b/addons/webinterface.default/addon.xml index 6ec7e7295e..c4c5e756da 100644 --- a/addons/webinterface.default/addon.xml +++ b/addons/webinterface.default/addon.xml @@ -15,6 +15,7 @@ <summary lang="bg">Уебинтерфейс на Team XBMC. (стандартният уебинтерфейс на XBMC)</summary> <summary lang="en">Team XBMC Web Interface. (XBMC's default web interface)</summary> <summary lang="es">Interface web de XBMC. (Interface web por defecto de XBMC)</summary> + <summary lang="fi">Team XBMC:n WWW-käyttöliittymä. (XBMC:n oletus WWW-käyttöliittymä)</summary> <summary lang="nl">Team XBMC Webinterface. (XBMC's standaard webinterface)</summary> <summary lang="pl">Standardowy interfejs WWW XBMC.</summary> <summary lang="pt">Interface Web da Team XBMC. (Interface Web padrão do XBMC)</summary> @@ -25,6 +26,7 @@ <description lang="bg">Стандартния уебинтерфейс на XBMC; Направен е за устройства с най-различни резолюции</description> <description lang="en">Default web interface for XBMC; Designed for devices of all resolutions</description> <description lang="es">Interface web por defecto de XBMC. Diseñada para dispositivos de cualquier resolución</description> + <description lang="fi">Oletus WWW-käyttöliittymä XBMC:lle. Suunniteltu käytettäväksi kaiken kokoisilla laitteilla.</description> <description lang="nl">Standaard XBMC-webinterface; geschikt voor alle resoluties</description> <description lang="pl">Domyślny interfejs WWW dla XBMC; Zaprojektowany dla urządzeń z dowolną rozdzielczością</description> <description lang="pt">Interface Web padrão do XBMC. Desenhada para dispositivos com qualquer resolução</description> diff --git a/language/Czech/strings.xml b/language/Czech/strings.xml index 898806d4e5..f2267208b8 100644 --- a/language/Czech/strings.xml +++ b/language/Czech/strings.xml @@ -1,8 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <!--Language file translated with Team XBMC Translator--> <!--Translator: ezechiel1917--> -<!--Date of translation: 26/09/2010--> -<!--updated 3/12/2011 by mirek--> +<!--Date of translation: 26.09.2010--> +<!--Updated 03.12.2011 by mirek--> +<!--Updated 06.01.2012 by babča--> <strings> <string id="0">Programy</string> <string id="1">Obrázky</string> @@ -56,7 +57,7 @@ <string id="60">říj</string> <string id="61">lis</string> <string id="62">pro</string> - + <string id="71">S</string> <string id="72">SSV</string> <string id="73">SV</string> @@ -1021,7 +1022,7 @@ <string id="13100">Filtr blikání</string> <string id="13101">Ponechat nastavení ovladače (vyžadován restart)</string> - + <string id="13105">Vertikální synchronizace obrazovky (V-Sync)</string> <string id="13106">Vypnuto</string> <string id="13107">Zapnuto při přehrávání videa</string> @@ -1069,11 +1070,11 @@ <string id="13200">Profily</string> <string id="13201">Odstranit profil '%s'?</string> - + <string id="13204">Naposledy načtený profil:</string> <string id="13205">Neznámý</string> <string id="13206">Přepsat</string> - + <string id="13208">Budík</string> <string id="13209">Interval budíku (v min)</string> <string id="13210">Budík nastaven na %im</string> @@ -1174,7 +1175,7 @@ <string id="13359">Přiřadit ikonu interpreta</string> <string id="13360">Automaticky generovat náhledy</string> <string id="13361">Povolit úpravu hlasu</string> - + <string id="13375">Povolit zařízení</string> <string id="13376">Hlasitost</string> <string id="13377">Výchozí nastavení zobrazení</string> @@ -1343,7 +1344,7 @@ <string id="14080">Časové pásmo</string> <string id="14081">Soubory a složky</string> <string id="14082">Zobrazovat EXIF informace o obrázku</string> - <string id="14083">Upřednostňovat režim celé obrazovky na velikost okna</string> + <string id="14083">Otevřít v okně přes celou obrazovku namísto pravého fullscreen režimu</string> <string id="14084">Přidávat skladby do fronty při jejich výběru</string> <string id="14085">Automaticky přehrávat Audio CD</string> <string id="14086">Přehrávání</string> @@ -1498,7 +1499,7 @@ <string id="16039">Off</string> <string id="16040">Auto</string> <string id="16041">On</string> - + <string id="16100">Všechna videa</string> <string id="16101">Nezhlédnuté</string> <string id="16102">Zhlédnuté</string> @@ -1539,7 +1540,7 @@ <string id="16322">Spline36</string> <string id="16323">Spline36 optimized</string> <string id="16324">Software Blend</string> - + <string id="16400">Post-processing</string> <string id="17500">Zobrazovat odpočet do uspání</string> @@ -1611,7 +1612,7 @@ <string id="20069">Nemohu vytvořit složku</string> <string id="20070">Složka profilu</string> <string id="20071">Chcete nastavit výchozí zdroje médií</string> - <string id="20072">Ujistěte se, zda je do vybráné složky možnost zápisu</string> + <string id="20072">Ujistěte se, zda je do vybrané složky možnost zápisu</string> <string id="20073">a nový název složky v pořádku</string> <string id="20074">Přístupnost</string> <string id="20075">Zadejte hlavní kód rodičovského zámku</string> @@ -1926,7 +1927,7 @@ <string id="21366">Složka s titulky</string> <string id="21367">Video a alternativní složka s titulky</string> <string id="21368">Přepsat písmo v ASS/SSA titulcích</string> - + <string id="21369">Povolit kurzor myši</string> <string id="21370">Přehrávat zvuky při přehrávání multimediálních souborů</string> <string id="21371">Náhledy</string> @@ -2028,13 +2029,13 @@ <string id="21805">Rozlišení</string> <string id="21806">Komentář</string> <string id="21807">Barva/ČB</string> - <string id="21808">Zpracování Jpeg</string> + <string id="21808">Zpracování JPEG</string> <string id="21820">Datum/Čas</string> <string id="21821">Popis</string> <string id="21822">Značka fotoaparátu</string> <string id="21823">Model fotoaparátu</string> - <string id="21824">Exif komentář</string> + <string id="21824">EXIF komentář</string> <string id="21825">Firmware</string> <string id="21826">Clona</string> <string id="21827">Ohnisko objektivu</string> @@ -2090,7 +2091,7 @@ <string id="21892">Hudební nástroje</string> <string id="21893">Datum narození</string> <string id="21894">Datum seskupení</string> - <string id="21895">Tématické zaměření</string> + <string id="21895">Tematické zaměření</string> <string id="21896">Datum rozpuštění</string> <string id="21897">Datum úmrtí</string> <string id="21898">Aktivní v letech</string> @@ -2372,7 +2373,7 @@ <string id="35502">Název</string> <string id="35503">Výrobce</string> <string id="35504">ID produktu</string> - + <string id="36000">Pulse-Eight CEC adaptér</string> <string id="36001">Pulse-Eight Nyxboard</string> <string id="36002">Switch to keyboard side command</string> diff --git a/language/Finnish/strings.xml b/language/Finnish/strings.xml index 8200a2ee7a..e5c589d093 100644 --- a/language/Finnish/strings.xml +++ b/language/Finnish/strings.xml @@ -806,7 +806,7 @@ <string id="1256">Pingauksen väli</string> <string id="1257">Yhdistetäänkö havaittuun järjestelmään?</string> - <string id="1260">Julkista nämä palvelut toisiin järjestelmiin Zeroconf publishing:in kautta</string> + <string id="1260">Julkista nämä palvelut toisiin järjestelmiin Zeroconf-julkaisujärjestelmän kautta</string> <string id="1270">Salli XBMC:n vastaanottaa AirPlay sisältöä</string> <string id="1271">Laitteen nimi</string> <string id="1272">- Käytä salasanaa</string> @@ -877,9 +877,11 @@ <string id="10019">Asetukset - Käyttöliittymä</string> <string id="10020">Skriptit</string> <string id="10021">Nettiselain</string> - + <string id="10025">Videot</string> <string id="10028">Videot/Toistolista</string> + <string id="10029">Kirjautumisikkuna</string> <string id="10034">Asetukset - Profiilit</string> + <string id="10040">Lisäosaselain</string> <string id="10100">Kyllä/Ei -dialogi</string> <string id="10101">Tila -dialogi</string> @@ -1775,7 +1777,7 @@ <string id="20326">Tämä palauttaa asettamasi %s kalibroinnin arvot</string> <string id="20327">oletusarvoiksi</string> <string id="20328">Valitse kohdesijainti</string> - + <string id="20329">Elokuvan tiedostot ovat eri kansioissa, jotka ovat nimetty elokuvan mukaan</string> <string id="20330">Hae kansionimiä</string> <string id="20331">Tiedostonimet</string> <string id="20332">Käytetäänkö haettaessa tiedosto- vai kansionimiä?</string> @@ -1865,7 +1867,7 @@ <string id="20416">Ensiesitys</string> <string id="20417">Käsikirjoittaja</string> <string id="20418"></string> - <string id="20419">Näytä metatiedot "Tiedostot"-näkymässä</string> + <string id="20419">Korvaa tiedostojen nimet kirjaston sisältämillä nimillä</string> <string id="20420">Ei koskaan</string> <string id="20421">Jos samalta tuotantokaudelta</string> @@ -1905,6 +1907,7 @@ <string id="20455">Kuuntelijat</string> <string id="20456">Aseta elokuvasetin fanitaide</string> <string id="20457">Elokuvasetti</string> + <string id="20458">Ryhmittele elokuvat settien mukaan</string> <!-- up to 21329 is reserved for the video db !! !--> <string id="21330">Näytä piilotetut tiedostot ja kansiot</string> @@ -2012,6 +2015,8 @@ <string id="21451">Internet-yhteys vaaditaan.</string> <string id="21452">Nouda lisää...</string> <string id="21453">Juurikansio</string> + <string id="21454">Välimuisti täynnä</string> + <string id="21455">Välimuisti täyttyi ennen toistoon tarvittavaa määrää</string> <string id="21460">Tekstityksen sijainti</string> <string id="21461">Kiinteä</string> @@ -2332,6 +2337,8 @@ <string id="33102">Tapahtumapalvelin</string> <string id="33103">Etäviestipalvelin</string> + <string id="33200">Uusi yhteys tunnistettu</string> + <!-- translators: no need to add these to your language files --> <string id="34000">Lame</string> <string id="34001">Vorbis</string> @@ -2356,6 +2363,14 @@ <string id="34201">Seuraavaa kohdetta ei löydy</string> <string id="34202">Edellistä kohdetta ei löydy</string> + <string id="34300">Zeroconf-palvelua ei voitu käynnistää</string> + <string id="34301">Onko Applen Bonjour -palvelu asennettu? Katso lokitiedostosta lisätietoja.</string> + + <string id="34400">Videon renreröintitapa</string> + <string id="34401">Ei voitu käyttää videon suodatin/skaalaus -asetuksia, otetaan käyttöön bilineaarinen skaalausmenetelmä</string> + <string id="34402">Äänilaitteen alustaminen epäonnistui</string> + <string id="34403">Tarkista ääniasetukset</string> + <string id="35000">Oheislaitteet</string> <string id="35001">Yleinen HID-laite</string> diff --git a/language/Greek/strings.xml b/language/Greek/strings.xml index b3346270a7..6c5c1facbd 100644 --- a/language/Greek/strings.xml +++ b/language/Greek/strings.xml @@ -2403,5 +2403,5 @@ <string id="36015">Αριθμός θύρας HDMI</string> <string id="36016">Συνδεδεμένη</string> <!-- max. 13 characters --> <string id="36017">O προσαρμογέας εντοπίσθηκε, αλλά η libcec δεν είναι διαθέσιμη</string> - <string id="36018">Χρήση της γλώσσας της τηλεόρασης</string> + <string id="36018">Χρήση των ρυθμίσεων γλώσσας της τηλεόρασης</string> </strings> diff --git a/tools/darwin/depends/xbmc/Makefile b/tools/darwin/depends/xbmc/Makefile index 5efd9fe037..b098ddd648 100644 --- a/tools/darwin/depends/xbmc/Makefile +++ b/tools/darwin/depends/xbmc/Makefile @@ -8,6 +8,10 @@ CONFIGURE=./configure --prefix=$(PREFIX) \ PKG_CONFIG_PATH=$(PREFIX)/lib/pkgconfig \ PYTHON=$(PREFIX)/bin/python +ifeq ( $(XBMC_DARWIN_RELEASE), 1) + CONFIGURE+= --disable-debug +endif + all: configure configure: diff --git a/xbmc/PartyModeManager.cpp b/xbmc/PartyModeManager.cpp index 26b7290224..ecfaf78b98 100644 --- a/xbmc/PartyModeManager.cpp +++ b/xbmc/PartyModeManager.cpp @@ -111,8 +111,9 @@ bool CPartyModeManager::Enable(PartyModeContext context /*= PARTYMODECONTEXT_MUS CMusicDatabase db; if (db.Open()) { + set<CStdString> playlists; if ( playlistLoaded ) - m_strCurrentFilterMusic = playlist.GetWhereClause(db); + m_strCurrentFilterMusic = playlist.GetWhereClause(db, playlists); CLog::Log(LOGINFO, "PARTY MODE MANAGER: Registering filter:[%s]", m_strCurrentFilterMusic.c_str()); m_iMatchingSongs = (int)db.GetSongIDs(m_strCurrentFilterMusic, songIDs); @@ -139,8 +140,9 @@ bool CPartyModeManager::Enable(PartyModeContext context /*= PARTYMODECONTEXT_MUS CVideoDatabase db; if (db.Open()) { + set<CStdString> playlists; if ( playlistLoaded ) - m_strCurrentFilterVideo = playlist.GetWhereClause(db); + m_strCurrentFilterVideo = playlist.GetWhereClause(db, playlists); CLog::Log(LOGINFO, "PARTY MODE MANAGER: Registering filter:[%s]", m_strCurrentFilterVideo.c_str()); m_iMatchingSongs += (int)db.GetMusicVideoIDs(m_strCurrentFilterVideo, songIDs2); diff --git a/xbmc/cores/AudioRenderers/CoreAudioRenderer.cpp b/xbmc/cores/AudioRenderers/CoreAudioRenderer.cpp index a5b2b6e172..a337a54768 100644 --- a/xbmc/cores/AudioRenderers/CoreAudioRenderer.cpp +++ b/xbmc/cores/AudioRenderers/CoreAudioRenderer.cpp @@ -1258,7 +1258,7 @@ bool CCoreAudioRenderer::InitializePCM(UInt32 channels, UInt32 samplesPerSecond, CCoreAudioChannelLayout deviceLayout; if (!m_AudioDevice.GetPreferredChannelLayout(deviceLayout)) return false; - + // Detect devices with no Speaker Configuration bool undefinedLayout = true; for (UInt32 c = 0; c < deviceLayout.GetChannelCount(); c++) @@ -1272,17 +1272,21 @@ bool CCoreAudioRenderer::InitializePCM(UInt32 channels, UInt32 samplesPerSecond, } if (undefinedLayout) { - if (!g_sysinfo.IsAppleTV()) // AppleTV users cannot do this... + AudioChannelLayoutTag newLayoutTag = kAudioChannelLayoutTag_UseChannelBitmap; + if (g_sysinfo.IsAppleTV()) // AppleTV is only Stereo + newLayoutTag = kAudioChannelLayoutTag_Stereo; + else // AppleTV users cannot do this... { CLog::Log(LOGERROR, "CCoreAudioRenderer::InitializePCM: The selected device (%s) does not have a speaker layout configured. Using the default layout.", m_AudioDevice.GetName()); CLog::Log(LOGERROR, "CCoreAudioRenderer::InitializePCM: \tPlease go to Applications -> Utilities -> Audio MIDI Setup, and select 'Configure Speakers...'"); - } - // Pick a default layout based on the number of channels - AudioChannelLayoutTag newLayoutTag = GetDefaultLayout(deviceLayout.GetChannelCount()); - if (newLayoutTag == kAudioChannelLayoutTag_UseChannelBitmap) // Undefined, give up... - { - CLog::Log(LOGERROR, "CCoreAudioRenderer::InitializePCM: Unable to find a suitable default layout for this device."); - return false; + + // Pick a default layout based on the number of channels + newLayoutTag = GetDefaultLayout(deviceLayout.GetChannelCount()); + if (newLayoutTag == kAudioChannelLayoutTag_UseChannelBitmap) // Undefined, give up... + { + CLog::Log(LOGERROR, "CCoreAudioRenderer::InitializePCM: Unable to find a suitable default layout for this device."); + return false; + } } if (!deviceLayout.SetLayout(newLayoutTag)) { diff --git a/xbmc/cores/dvdplayer/DVDInputStreams/DVDStateSerializer.cpp b/xbmc/cores/dvdplayer/DVDInputStreams/DVDStateSerializer.cpp index 5f2c1da792..89863e33b8 100644 --- a/xbmc/cores/dvdplayer/DVDInputStreams/DVDStateSerializer.cpp +++ b/xbmc/cores/dvdplayer/DVDInputStreams/DVDStateSerializer.cpp @@ -19,6 +19,13 @@ * */ +#if (defined HAVE_CONFIG_H) && (!defined WIN32) + #include "config.h" +#endif +#ifdef _WIN32 +#include "system.h" +#endif + #include "DllDvdNav.h" #include "tinyXML/tinyxml.h" diff --git a/xbmc/dbwrappers/mysqldataset.cpp b/xbmc/dbwrappers/mysqldataset.cpp index 458f353261..8a7293338d 100644 --- a/xbmc/dbwrappers/mysqldataset.cpp +++ b/xbmc/dbwrappers/mysqldataset.cpp @@ -258,7 +258,7 @@ int MysqlDatabase::copy(const char *backup_name) { backup_name, row[0], row[0]); if ( (ret=query_with_reconnect(sql)) != MYSQL_OK ) - throw DbErrors("Can't copy data for table '%s'\nError: %s", db.c_str(), ret); + throw DbErrors("Can't copy data for table '%s'\nError: %s", row[0], ret); } } diff --git a/xbmc/dialogs/GUIDialogMediaSource.cpp b/xbmc/dialogs/GUIDialogMediaSource.cpp index 64d9337a87..ffbe20f2e9 100644 --- a/xbmc/dialogs/GUIDialogMediaSource.cpp +++ b/xbmc/dialogs/GUIDialogMediaSource.cpp @@ -95,7 +95,6 @@ bool CGUIDialogMediaSource::OnMessage(CGUIMessage& message) case GUI_MSG_WINDOW_INIT: { m_confirmed = false; - m_bRunScan = false; m_bNameChanged=false; UpdateButtons(); } @@ -149,16 +148,6 @@ bool CGUIDialogMediaSource::ShowAndAddMediaSource(const CStdString &type) share.m_strThumbnailImage = dialog->m_paths->Get(0)->GetThumbnailImage(); } g_settings.AddShare(type, share); - - if (type == "video") - { - if (dialog->m_bRunScan) - { - CGUIDialogVideoScan* scanner = (CGUIDialogVideoScan*)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN); - if (scanner) - scanner->StartScanning(share.strPath, true); - } - } } dialog->m_paths->Clear(); return confirmed; @@ -345,7 +334,7 @@ void CGUIDialogMediaSource::OnOK() if (m_type == "video" && !URIUtils::IsLiveTV(share.strPath) && !share.strPath.Left(6).Equals("rss://")) { - CGUIWindowVideoBase::OnAssignContent(share.strPath, 0, m_info, m_settings); + CGUIWindowVideoBase::OnAssignContent(share.strPath); } } diff --git a/xbmc/dialogs/GUIDialogMediaSource.h b/xbmc/dialogs/GUIDialogMediaSource.h index 4856efe322..ba96f15107 100644 --- a/xbmc/dialogs/GUIDialogMediaSource.h +++ b/xbmc/dialogs/GUIDialogMediaSource.h @@ -22,7 +22,6 @@ */ #include "guilib/GUIDialog.h" -#include "video/VideoInfoScanner.h" class CFileItemList; class CMediaSource; @@ -61,9 +60,5 @@ protected: CStdString m_name; CFileItemList* m_paths; bool m_confirmed; - ADDON::ScraperPtr m_info; - bool m_bRunScan; bool m_bNameChanged; - - VIDEO::SScanSettings m_settings; }; diff --git a/xbmc/filesystem/SmartPlaylistDirectory.cpp b/xbmc/filesystem/SmartPlaylistDirectory.cpp index aa6668f888..45cf60756f 100644 --- a/xbmc/filesystem/SmartPlaylistDirectory.cpp +++ b/xbmc/filesystem/SmartPlaylistDirectory.cpp @@ -46,11 +46,12 @@ namespace XFILE if (!playlist.Load(strPath)) return false; bool success = false, success2 = false; + std::set<CStdString> playlists; if (playlist.GetType().Equals("tvshows")) { CVideoDatabase db; db.Open(); - CStdString whereOrder = playlist.GetWhereClause(db) + " " + playlist.GetOrderClause(db); + CStdString whereOrder = playlist.GetWhereClause(db, playlists) + " " + playlist.GetOrderClause(db); success = db.GetTvShowsByWhere("videodb://2/2/", whereOrder, items); items.SetContent("tvshows"); db.Close(); @@ -59,7 +60,7 @@ namespace XFILE { CVideoDatabase db; db.Open(); - CStdString whereOrder = playlist.GetWhereClause(db) + " " + playlist.GetOrderClause(db); + CStdString whereOrder = playlist.GetWhereClause(db, playlists) + " " + playlist.GetOrderClause(db); success = db.GetEpisodesByWhere("videodb://2/2/", whereOrder, items); items.SetContent("episodes"); db.Close(); @@ -68,7 +69,7 @@ namespace XFILE { CVideoDatabase db; db.Open(); - success = db.GetMoviesByWhere("videodb://1/2/", playlist.GetWhereClause(db), playlist.GetOrderClause(db), items, true); + success = db.GetMoviesByWhere("videodb://1/2/", playlist.GetWhereClause(db, playlists), playlist.GetOrderClause(db), items, true); items.SetContent("movies"); db.Close(); } @@ -76,7 +77,7 @@ namespace XFILE { CMusicDatabase db; db.Open(); - success = db.GetAlbumsByWhere("musicdb://3/", playlist.GetWhereClause(db), playlist.GetOrderClause(db), items); + success = db.GetAlbumsByWhere("musicdb://3/", playlist.GetWhereClause(db, playlists), playlist.GetOrderClause(db), items); items.SetContent("albums"); db.Close(); } @@ -90,7 +91,7 @@ namespace XFILE if (playlist.GetType().Equals("mixed")) playlist.SetType("songs"); - CStdString whereOrder = playlist.GetWhereClause(db) + " " + playlist.GetOrderClause(db); + CStdString whereOrder = playlist.GetWhereClause(db, playlists) + " " + playlist.GetOrderClause(db); success = db.GetSongsByWhere("", whereOrder, items); items.SetContent("songs"); db.Close(); @@ -103,7 +104,7 @@ namespace XFILE CStdString type=playlist.GetType(); if (playlist.GetType().Equals("mixed")) playlist.SetType("musicvideos"); - CStdString whereOrder = playlist.GetWhereClause(db) + " " + playlist.GetOrderClause(db); + CStdString whereOrder = playlist.GetWhereClause(db, playlists) + " " + playlist.GetOrderClause(db); CFileItemList items2; success2 = db.GetMusicVideosByWhere("videodb://3/2/", whereOrder, items2, false); // TODO: SMARTPLAYLISTS Don't check locks??? db.Close(); diff --git a/xbmc/guilib/GUIStaticItem.h b/xbmc/guilib/GUIStaticItem.h index 66fc49c1a3..37a9216f60 100644 --- a/xbmc/guilib/GUIStaticItem.h +++ b/xbmc/guilib/GUIStaticItem.h @@ -27,7 +27,7 @@ */ #include "GUIInfoTypes.h" -#include "../xbmc/FileItem.h" +#include "xbmc/FileItem.h" #include "GUIAction.h" class TiXmlElement; diff --git a/xbmc/input/InertialScrollingHandler.cpp b/xbmc/input/InertialScrollingHandler.cpp index 458ad5959a..1dfe459c15 100644 --- a/xbmc/input/InertialScrollingHandler.cpp +++ b/xbmc/input/InertialScrollingHandler.cpp @@ -75,6 +75,11 @@ bool CInertialScrollingHandler::CheckForInertialScrolling(const CAction* action) //on begin/tap stop all inertial scrolling if ( action->GetID() == ACTION_GESTURE_BEGIN ) { + //release any former exclusive mouse mode + //for making switching between multiple lists + //possible + CGUIMessage message(GUI_MSG_EXCLUSIVE_MOUSE, 0, 0); + g_windowManager.SendMessage(message); m_bScrolling = false; //wakeup screensaver on pan begin g_application.ResetScreenSaver(); diff --git a/xbmc/interfaces/Builtins.cpp b/xbmc/interfaces/Builtins.cpp index 958692cbdf..588be8d04d 100644 --- a/xbmc/interfaces/Builtins.cpp +++ b/xbmc/interfaces/Builtins.cpp @@ -826,9 +826,12 @@ int CBuiltins::Execute(const CStdString& execString) { int oldVolume = g_application.GetVolume(); int volume = atoi(parameter.c_str()); - - g_application.SetVolume(volume); - g_application.getApplicationMessenger().ShowVolumeBar(oldVolume < volume); + + g_application.SetVolume(volume); + if(oldVolume != volume) + { + g_application.getApplicationMessenger().ShowVolumeBar(oldVolume < volume); + } } else if (execute.Equals("playlist.playoffset")) { diff --git a/xbmc/music/windows/GUIWindowMusicBase.cpp b/xbmc/music/windows/GUIWindowMusicBase.cpp index ec2333410a..ee5d71e850 100644 --- a/xbmc/music/windows/GUIWindowMusicBase.cpp +++ b/xbmc/music/windows/GUIWindowMusicBase.cpp @@ -61,6 +61,7 @@ #include "utils/TimeUtils.h" #include "utils/log.h" #include "utils/URIUtils.h" +#include "video/VideoInfoTag.h" #include "ThumbnailCache.h" using namespace std; diff --git a/xbmc/network/AirPlayServer.cpp b/xbmc/network/AirPlayServer.cpp index 49f2315459..7388997fbb 100644 --- a/xbmc/network/AirPlayServer.cpp +++ b/xbmc/network/AirPlayServer.cpp @@ -25,6 +25,7 @@ #include <arpa/inet.h> #include "DllLibPlist.h" #include "utils/log.h" +#include "utils/URIUtils.h" #include "utils/StringUtils.h" #include "threads/SingleLock.h" #include "filesystem/File.h" @@ -699,8 +700,11 @@ int CAirPlayServer::CTCPClient::ProcessRequest( CStdString& responseHeader, { int oldVolume = g_application.GetVolume(); volume *= 100; - g_application.SetVolume(volume); - g_application.getApplicationMessenger().ShowVolumeBar(oldVolume < volume); + if(oldVolume != (int)volume) + { + g_application.SetVolume(volume); + g_application.getApplicationMessenger().ShowVolumeBar(oldVolume < volume); + } } } @@ -790,7 +794,11 @@ int CAirPlayServer::CTCPClient::ProcessRequest( CStdString& responseHeader, if (status != AIRPLAY_STATUS_NEED_AUTH) { - CFileItem fileToPlay(location + "|User-Agent=AppleCoreMedia/1.0.0.8F455 (Apple†TV; U; CPU OS 4_3 like Mac OS X; de_de)", false); + CStdString userAgent="AppleCoreMedia/1.0.0.8F455 (AppleTV; U; CPU OS 4_3 like Mac OS X; de_de)"; + CURL::Encode(userAgent); + location += "|User-Agent=" + userAgent; + + CFileItem fileToPlay(location, false); fileToPlay.SetProperty("StartPercent", position*100.0f); g_application.getApplicationMessenger().MediaPlay(fileToPlay); ComposeReverseEvent(reverseHeader, reverseBody, sessionId, EVENT_PLAYING); diff --git a/xbmc/pictures/GUIWindowPictures.cpp b/xbmc/pictures/GUIWindowPictures.cpp index c0ba078cbd..9df0347050 100644 --- a/xbmc/pictures/GUIWindowPictures.cpp +++ b/xbmc/pictures/GUIWindowPictures.cpp @@ -22,6 +22,7 @@ #include "threads/SystemClock.h" #include "system.h" #include "GUIWindowPictures.h" +#include "URL.h" #include "Util.h" #include "Picture.h" #include "Application.h" diff --git a/xbmc/playlists/SmartPlayList.cpp b/xbmc/playlists/SmartPlayList.cpp index f5d1ffa3a2..f99e519698 100644 --- a/xbmc/playlists/SmartPlayList.cpp +++ b/xbmc/playlists/SmartPlayList.cpp @@ -580,26 +580,6 @@ CStdString CSmartPlaylistRule::GetWhereClause(CDatabase &db, const CStdString& s query = "idFile" + negate + " in (select distinct idFile from streamdetails where strSubtitleLanguage " + parameter + ")"; else if (m_field == FIELD_VIDEOASPECT) query = "idFile" + negate + " in (select distinct idFile from streamdetails where fVideoAspect " + parameter + ")"; - else if (m_field == FIELD_PLAYLIST) - { // playlist field - grab our playlist and add to our where clause - CStdString playlistFile = CSmartPlaylistDirectory::GetPlaylistByName(m_parameter, strType); - if (!playlistFile.IsEmpty()) - { - CSmartPlaylist playlist; - playlist.Load(playlistFile); - CStdString playlistQuery; - // only playlists of same type will be part of the query - if (playlist.GetType().Equals(strType) || (playlist.GetType().Equals("mixed") && (strType == "songs" || strType == "musicvideos")) || playlist.GetType().IsEmpty()) - { - playlist.SetType(strType); - playlistQuery = playlist.GetWhereClause(db, false); - } - if (m_operator == OPERATOR_DOES_NOT_EQUAL && playlist.GetType().Equals(strType)) - query.Format("NOT (%s)", playlistQuery.c_str()); - else if (m_operator == OPERATOR_EQUALS && playlist.GetType().Equals(strType)) - query = playlistQuery; - } - } if (m_field == FIELD_PLAYCOUNT && strType != "songs" && strType != "albums") { // playcount is stored as NULL or number in video db if ((m_operator == OPERATOR_EQUALS && m_parameter == "0") || @@ -931,7 +911,7 @@ void CSmartPlaylist::AddRule(const CSmartPlaylistRule &rule) m_playlistRules.push_back(rule); } -CStdString CSmartPlaylist::GetWhereClause(CDatabase &db, bool needWhere /* = true */) +CStdString CSmartPlaylist::GetWhereClause(CDatabase &db, set<CStdString> &referencedPlaylists, bool needWhere /* = true */) { CStdString rule, currentRule; for (vector<CSmartPlaylistRule>::iterator it = m_playlistRules.begin(); it != m_playlistRules.end(); ++it) @@ -941,7 +921,33 @@ CStdString CSmartPlaylist::GetWhereClause(CDatabase &db, bool needWhere /* = tru else if (needWhere) rule += "WHERE "; rule += "("; - currentRule = (*it).GetWhereClause(db, GetType()); + CStdString currentRule; + if (it->m_field == CSmartPlaylistRule::FIELD_PLAYLIST) + { + CStdString playlistFile = CSmartPlaylistDirectory::GetPlaylistByName(it->m_parameter, GetType()); + if (!playlistFile.IsEmpty() && referencedPlaylists.find(playlistFile) == referencedPlaylists.end()) + { + referencedPlaylists.insert(playlistFile); + CSmartPlaylist playlist; + playlist.Load(playlistFile); + CStdString playlistQuery; + // only playlists of same type will be part of the query + if (playlist.GetType().Equals(GetType()) || (playlist.GetType().Equals("mixed") && (GetType() == "songs" || GetType() == "musicvideos")) || playlist.GetType().IsEmpty()) + { + playlist.SetType(GetType()); + playlistQuery = playlist.GetWhereClause(db, referencedPlaylists, false); + } + if (playlist.GetType().Equals(GetType())) + { + if (it->m_operator == CSmartPlaylistRule::OPERATOR_DOES_NOT_EQUAL) + currentRule.Format("NOT (%s)", playlistQuery.c_str()); + else + currentRule = playlistQuery; + } + } + } + else + currentRule = (*it).GetWhereClause(db, GetType()); // if we don't get a rule, we add '1' or '0' so the query is still valid and doesn't fail if (currentRule.IsEmpty()) currentRule = m_matchAllRules ? "'1'" : "'0'"; diff --git a/xbmc/playlists/SmartPlayList.h b/xbmc/playlists/SmartPlayList.h index 5359a62aa5..4da982b642 100644 --- a/xbmc/playlists/SmartPlayList.h +++ b/xbmc/playlists/SmartPlayList.h @@ -23,6 +23,7 @@ #include "utils/StdString.h" #include "tinyXML/tinyxml.h" #include <vector> +#include <set> class CDatabase; @@ -167,7 +168,16 @@ public: bool GetOrderAscending() const { return m_orderAscending; }; void AddRule(const CSmartPlaylistRule &rule); - CStdString GetWhereClause(CDatabase &db, bool needWhere = true); + + /*! \brief get the where clause for a playlist + We handle playlists inside playlists separately in order to ensure we don't introduce infinite loops + by playlist A including playlist B which also (perhaps via other playlists) then includes playlistA. + + \param db the database to use to format up results + \param referencedPlaylists a set of playlists to know when we reach a cycle + \param needWhere whether we need to prepend the where clause with "WHERE " + */ + CStdString GetWhereClause(CDatabase &db, std::set<CStdString> &referencedPlaylists, bool needWhere = true); CStdString GetOrderClause(CDatabase &db); const std::vector<CSmartPlaylistRule> &GetRules() const; diff --git a/xbmc/settings/AdvancedSettings.cpp b/xbmc/settings/AdvancedSettings.cpp index d14b1396e9..3275967a4c 100644 --- a/xbmc/settings/AdvancedSettings.cpp +++ b/xbmc/settings/AdvancedSettings.cpp @@ -100,6 +100,7 @@ void CAdvancedSettings::Initialize() m_DXVACheckCompatibilityPresent = false; m_DXVAForceProcessorRenderer = true; m_videoFpsDetect = 1; + m_videoDefaultLatency = 0.0; m_musicUseTimeSeeking = true; m_musicTimeSeekForward = 10; @@ -542,7 +543,6 @@ void CAdvancedSettings::ParseSettingsFile(const CStdString &file) XMLUtils::GetInt(pElement, "fpsdetect", m_videoFpsDetect, 0, 2); // Store global display latency settings - m_videoDefaultLatency = 0; TiXmlElement* pVideoLatency = pElement->FirstChildElement("latency"); if (pVideoLatency) { diff --git a/xbmc/video/VideoDatabase.cpp b/xbmc/video/VideoDatabase.cpp index 451ad917f0..3442cb89e7 100644 --- a/xbmc/video/VideoDatabase.cpp +++ b/xbmc/video/VideoDatabase.cpp @@ -5463,13 +5463,16 @@ CStdString CVideoDatabase::GetContentForPath(const CStdString& strPath) ScraperPtr scraper = GetScraperForPath(strPath, settings, foundDirectly); if (scraper) { - if (scraper->Content() == CONTENT_TVSHOWS && !foundDirectly) - { // check for episodes or seasons (ASSUMPTION: no episodes == seasons (i.e. assume show/season/episodes structure) + if (scraper->Content() == CONTENT_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) CStdString sql = PrepareSQL("select count(1) from episodeview where strPath = '%s' limit 1", 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/video/windows/GUIWindowVideoBase.cpp b/xbmc/video/windows/GUIWindowVideoBase.cpp index 86aa5f3632..cb40b4918f 100644 --- a/xbmc/video/windows/GUIWindowVideoBase.cpp +++ b/xbmc/video/windows/GUIWindowVideoBase.cpp @@ -1153,9 +1153,7 @@ bool CGUIWindowVideoBase::OnContextButton(int itemNumber, CONTEXT_BUTTON button) { case CONTEXT_BUTTON_SET_CONTENT: { - SScanSettings settings; - ADDON::ScraperPtr info = m_database.GetScraperForPath(item->HasVideoInfoTag() ? item->GetVideoInfoTag()->m_strPath : item->GetPath(), settings); - OnAssignContent(item->GetPath(),0, info, settings); + OnAssignContent(item->HasVideoInfoTag() ? item->GetVideoInfoTag()->m_strPath : item->GetPath()); return true; } case CONTEXT_BUTTON_PLAY_PART: @@ -1990,16 +1988,15 @@ bool CGUIWindowVideoBase::OnUnAssignContent(const CStdString &path, int label1, return false; } -void CGUIWindowVideoBase::OnAssignContent(const CStdString &path, int iFound, ADDON::ScraperPtr& info, SScanSettings& settings) +void CGUIWindowVideoBase::OnAssignContent(const CStdString &path) { bool bScan=false; CVideoDatabase db; db.Open(); - if (iFound == 0) - { - info = db.GetScraperForPath(path, settings); - } - + + SScanSettings settings; + ADDON::ScraperPtr info = db.GetScraperForPath(path, settings); + ADDON::ScraperPtr info2(info); if (CGUIDialogContentSettings::Show(info, settings, bScan)) @@ -2013,14 +2010,14 @@ void CGUIWindowVideoBase::OnAssignContent(const CStdString &path, int iFound, AD if (OnUnAssignContent(path,20442,20443,20444)) bScan = true; } - - db.SetScraperForPath(path,info,settings); - - if (bScan) - { - CGUIDialogVideoScan* pDialog = (CGUIDialogVideoScan*)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN); - if (pDialog) - pDialog->StartScanning(path, true); - } + } + + db.SetScraperForPath(path,info,settings); + + if (bScan) + { + CGUIDialogVideoScan* pDialog = (CGUIDialogVideoScan*)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN); + if (pDialog) + pDialog->StartScanning(path, true); } } diff --git a/xbmc/video/windows/GUIWindowVideoBase.h b/xbmc/video/windows/GUIWindowVideoBase.h index d9168fd97d..01cda2cbb9 100644 --- a/xbmc/video/windows/GUIWindowVideoBase.h +++ b/xbmc/video/windows/GUIWindowVideoBase.h @@ -60,7 +60,12 @@ public: */ static void AppendAndClearSearchItems(CFileItemList &searchItems, const CStdString &prependLabel, CFileItemList &results); - static void OnAssignContent(const CStdString &path, int iFound, ADDON::ScraperPtr& scraper, VIDEO::SScanSettings& settings); + /*! \brief Prompt the user for assigning content to a path. + Based on changes, we then call OnUnassignContent, update or refresh scraper information in the database + and optionally start a scan + \param path the path to assign content for + */ + static void OnAssignContent(const CStdString &path); /*! \brief checks the database for a resume position and puts together a string \param item selected item |